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

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

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

Регистрация: Jun 2014
Сообщений: 558
По умолчанию Как найти слушателя?

В отрывке кода я создаю новый экземпляр класса, отправляю необходимые данные и создаю слушателя события. Нужно всё это, что бы разные элементы из массива (ссылки на экземпляры массива и есть "Spot") получили начальные координаты, конечные координаты и угол и начали свой движение. Но вот вопрос, а как я опосля смогу убить слушателя Энтер_фрейм, они будут появляться пачками, нужно убивать. Или придётся для каждого мувика наследовать этот класс и потом удалять (этот вариант я знаю как делать, но мороки много и добавляется ещё 7 классов).
Код AS3:
		public function fn_LocationSpot(i): void {
			gl_variable.indexSpot = i -1;
			var _t: int = 100;
			var _timer: Timer = new Timer(_t, i);
			_timer.addEventListener("timer", fn_TimerSpot);
			_timer.start();
		}
		private function fn_TimerSpot(e: TimerEvent): void {
			var Spot = VectorSpot[gl_variable.indexSpot];
//углы*********************************************************************************
			var angl: Number =(Math.atan((man.y - Spot.y) / (man.x - Spot.x))) / Math.PI * 180;
			if(angl > 0)
				angl -= 180;
			Spot.rotation = angl + 90;
//**************************************************************************************
			Spot.x = man.x;
			Spot.y = man.y;
			_stage.addChild(Spot);
			var j_x = (Math.random() * 1450) + 100;
			var j_y = (Math.random() * 750) + 180;
			playSpot = new PlaySpotClass (Spot, man.x,man.y, angl, j_x, j_y);
			_stage.addEventListener(Event.ENTER_FRAME, playSpot.fn_play);
			++gl_variable.indexSpotInStage;
			if  (gl_variable.indexSpot != 0)
			--gl_variable.indexSpot;
			if (gl_variable.indexSpot == 0)
				_stage.removeEventListener("timer", fn_TimerSpot);
				_stage.removeEventListener("timer", fn_TimerSpot);
		}
	}
}
Код AS3:
package SpotClass {
	import flash.events.Event;
	import flash.display.MovieClip;
 
	public class PlaySpotClass extends MovieClip{
		private var spot: MovieClip ;
		public var end_X: Number;
		public var end_Y: Number;
 
		public function PlaySpotClass(_spot, _x, _y, _rotation, _end_X, _end_Y) {
			spot = _spot;
			spot.x = _x;
			spot.y = _y;
			rotation = _rotation;
			end_X = _end_X;
			end_Y = _end_Y;
		}
		public function fn_play(e: Event):void{
			//движение
		}
	}
}
п.с. А то мож не совсем понятно, я экземпляры playSpot создаю внутри функции, так же как и слушателя и создав ещё один, я не знаю, как мне обратиться к предыдущему

Старый 13.02.2015, 15:41
AleXXX вне форума Посмотреть профиль Отправить личное сообщение для AleXXX Найти все сообщения от AleXXX
  № 2  
Ответить с цитированием
AleXXX

Регистрация: May 2012
Сообщений: 38
Код AS1/AS2:
......
_stage.addChild(Spot);
......
playSpot = new PlaySpotClass (Spot, man.x,man.y, angl, j_x, j_y);
_stage.addEventListener(Event.ENTER_FRAME, playSpot.fn_play);
.....
Здесь действительно слушатели события будут создаваться пачками.Поэтому :
1) Если playSpot является наследником DisplayObject, то лучше
Код AS3:
playSpot.addEventListener(Event.ENTER_FRAME, playSpot.fn_play);
2) Если playSpot НЕ является наследником DisplayObject, то
Код AS3:
...
_stage.addEventListener(Event.ENTER_FRAME, onFrame); //единожды где-то
_callbackPool:Vector.<Function> = new Vector.<Function>();  //единожды где-то
 
......
// В слушателе таймера:
........
playSpot = new PlaySpotClass (Spot, man.x,man.y, angl, j_x, j_y);
_callbackPool.push(playSpot.fn_play);
....
private function onFrame(e:Event){
   for each(var f:Function in _callbackPool){
        f();
   }
}
И главное не забывайте удалять из пула коллбэк при удалении инстанса PlaySpotClass

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

Регистрация: Jun 2014
Сообщений: 558
AleXXX спасибо!

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Чтобы
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 14.02.2015, 02:36
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 5  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
Вопрос не в тему,
создаём любой слушатель, а потом можно хоть 10 раз написать removeEventListener(**) к нему, ругаться флеш не будет, с учётом того, что слушатель удалён уже с первого раза

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

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

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


 


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


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