Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.03.2015, 12:31
WaldeMar1321 вне форума Посмотреть профиль Отправить личное сообщение для WaldeMar1321 Найти все сообщения от WaldeMar1321
  № 1  
Ответить с цитированием
WaldeMar1321

Регистрация: Mar 2015
Сообщений: 26
По умолчанию Помощь с ООП

Здравствуйте! Есть одна проблема, и вы возможно можете помочь.
Описание - есть три класса: Class1, Class2, и собственно Main (все MovieClip)
Class1 проигрывает свою анимацию на собственном таймере с использованием nextFrame,
Class2 должен подождать до нужного кадра анимации Class1 и выполнить свою со своим таймером.
Логично будет отслеживать Class1.currentFrame, я пытался сделать это внутри Class2.
Проблема 1: Я не знаю возможно ли это? Так как я обращаюсь к свойству MovieClip через Class1
без явных определений типа "Class1::MovieClip::currenFrame" или как-то так. В С++ с этим по проще.
И вторая проблема: весь не большой код имеет структуру

Код AS3:
package { //Main.as
 
	import flash.*//и все такое
 
	public class Main extends Movie Clip {
		var C1:MovieClip = new Class1;
		var C2:MovieClip = new Class2;
 
		public function Main()
		{
 
		}
 //Везде Main видит оба класса и свойства и методы базового класса MovieClip
	}
}
 
package { //Class1.as
 
	import flash.*
 
	public class Class1 extends MovieClip {
	public function Class1 () {}
	}
}
 
package { // Class2.as
 
import flash.*
 
	public class Class2 extends MovieClip 
	{
		public function Class2 () {}
 
		public function Panic()
		{
			if(Class1.currenFrame == 666) 
			{
				//Do something!
			}
		}
	}
}
Код имеет примерно такой вид. Но эти два класса
друг друга не видят. Как только я не обявлял их в Main.
Подскажите пожалуйста, что не так? Эти файлы в одном проекте, в одной папке.
Спасибо.

Старый 18.03.2015, 14:33
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Код AS3:
package { //Main.as
 
	import flash.*//и все такое
 
	public class Main extends MovieClip {
		var C1:MovieClip = new Class1;
		var C2:MovieClip = new Class2;
 
		public function Main()
		{
                     C1.play();
                     addEventListener(Event.ENTER_FRAME , onFrame);
		}
                private function onFrame(e:Event):void
                {    if(C1.currentFrame == 666)  C2.gotoAndPlay(1);
                 }
	}
}
 
package { //Class1.as
 
	import flash.*
 
	public class Class1 extends MovieClip {
	public function Class1 ()
         {  
         }
 
	}
}
 
package { // Class2.as
 
import flash.*
 
	public class Class2 extends MovieClip 
	{
		public function Class2 () {}
 
	}
}
__________________
Марк Tween

Старый 18.07.2015, 21:37
WaldeMar1321 вне форума Посмотреть профиль Отправить личное сообщение для WaldeMar1321 Найти все сообщения от WaldeMar1321
  № 3  
Ответить с цитированием
WaldeMar1321

Регистрация: Mar 2015
Сообщений: 26
Здравствуйте, спасибо за совет, только что дошли руки его проверить)))
Занят был, не поверите))
К сожалению вышеописанная вами схема работает раз через пять. Кадров там конечно не 666, но по идее цель умеет увернуться от выстрела иногда, но для этого нужно их точно регистрировать. нажатие мыши, 10 миллисекунд анимации, и только перед попаданием у нее есть шанс, иногда. Но если быстро кликать мышкой (не сильно быстро, но достаточно), этот момент проскальзывает.((
Сталкивались с таким? Спасибо за участие.

Старый 18.07.2015, 22:00
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 4  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от WaldeMar1321 Посмотреть сообщение
К сожалению вышеописанная вами схема работает раз через пять. Кадров там конечно не 666, но по идее цель умеет увернуться от выстрела иногда, но для этого нужно их точно регистрировать. нажатие мыши, 10 миллисекунд анимации, и только перед попаданием у нее есть шанс, иногда.
Основная причина, покадровая анимация. Вы используете анимацию в виде набора кадров, собранных в иде на таймлайне. Проблема в том, что используя постоянные и не изменные кадры, вы теряете контроль над воспроизведением как таковым, вы можете лишь отслеживать воспроизведение. Если вы хотите научиться программированию, ваша цель должна быть кодинг в блокноте. В противном случае из покадровой анимации делают снимки, и работают не как с мувиклипом, а как с массивом кадров. И уже в точности что, когда, и как "крутить" при показе.

Соотвественно работая с мувиклипом, предлагать решения, стоит только в том случае, если вы хотите просто выполнить задачу
__________________
return this...

Старый 18.07.2015, 22:17
WaldeMar1321 вне форума Посмотреть профиль Отправить личное сообщение для WaldeMar1321 Найти все сообщения от WaldeMar1321
  № 5  
Ответить с цитированием
WaldeMar1321

Регистрация: Mar 2015
Сообщений: 26
К сожалению я пока не могу рисовать прямо во флэше. Я делаю трех мерную анимацию в блендере, рендерю и потом по кадрам закиваю во флэш и там расставляю на таймлайне. Про кодинг в блокноте доставило))) Если бы не узнал что на флэше можно относительно быстро зарабатывать, продолжал бы писать на С++ в блокноте)))
Но смысл последнего предложения я не понял.

Старый 18.07.2015, 22:59
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 6  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Код AS3:
package { //Main.as
 
	import flash.*//и все такое
 
	public class Main extends Movie Clip {
		var C1:MovieClip = new Class1;
		var C2:MovieClip = new Class2;
 
		public function Main()
		{
			C1.addEventListener( CustomEvent.COMPLETE, playHandler );
			C2.addEventListener( CustomEvent.COMPLETE, playHandler );
 
			C1.play()
		}
 
		public function playHandler(e:CustomEvent):void {
 
			switch (e.target) {
				case C1:
 
					/*
					if (e.label=='somelabel666') { */
						C1.stop();
						C2.play();
					// } 
 
					break;
			}
		}
		//Везде Main видит оба класса и свойства и методы базового класса MovieClip
	}
}
 
package { //CustomEvent.as
 
	public class CustomEvent extends Event {
 
		public static var PLAY:String = 'PLAY';
		public static var COMPLETE:String = 'COMPLETE';
 
		public var label:String='default'
 
		public function CustomMovie (type:String, label:String='') {
 
			super(type,true);
 
			this.label = label;
		}
	}
 
}
 
package { //CustomMovie.as
 
	import flash.*
 
	public class CustomMovie extends MovieClip {
		public function CustomMovie () {
		}
 
		protected function complete(label:String=''):void {
			this.dispatchEvent( new CustomEvent(CustomEvent.COMPLETE, label ) );
		}
	}
 
}
 
package { //Class1.as
 
	import flash.*
 
	public class Class1 extends CustomMovie {
		public function Class1 () {
 
			addEventListener( Event.ENTER_FRAME, frameHandler ); 
 
		}
 
		public function frameHandler(e:Event):void {
			if(this.currenFrame == 666) 
			{
				removeEventListener( Event.ENTER_FRAME, frameHandler );
				complete('somelable666');
			}
		}
	}
}
 
package { // Class2.as
 
	import flash.events.Event;
 
	public class Class2 extends CustomMovie 
	{
		public function Class2 () {}
 
		public function Panic()
		{
 
		}
	}
}
__________________
return this...

Старый 22.07.2015, 16:11
meiciuc вне форума Посмотреть профиль Отправить личное сообщение для meiciuc Найти все сообщения от meiciuc
  № 7  
Ответить с цитированием
meiciuc

Регистрация: Nov 2005
Сообщений: 149
"Class1 проигрывает свою анимацию на собственном таймере с использованием nextFrame,
Class2 должен подождать до нужного кадра анимации Class1 и выполнить свою со своим таймером. "

самый простой вариант - генерить событие из Class1, детектить это событие, и начинать проигрывание в Class2.

т.е. - ОБРАЗНО это может выглядеть примерно так:

Код AS3:
var c1:Class1 = new Class1();
var c2:Class2 = new Class2();
 
c1.addEventListener("class_2_play_your_animation", function(e:Event):void{ c2.play() });
внутри же класса Class1, по достижении нужного момента, генерить событие
Код AS3:
dispatchEvent(new Event("class_2_play_your_animation"));

Создать новую тему Ответ Часовой пояс GMT +4, время: 06:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 06:34.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.