Показать сообщение отдельно
Старый 01.12.2013, 04:46
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 1  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Post Передача параметра в функцию, вызываемую через Enter Frame

Коллеги, изучив поиск по данному вопросу, не нашел однозначного решения.
Прошу извинить мои неизящные размышления, я выходец из AS2, переход не дается так просто...

Приведу простой пример. Есть некоторый класс Engine, в котором через функцию placeBullet создается экземпляр класса Bullet и добавляется на сцену. И далее, я хочу через Enter Frame двигать этот экземпляр. Важно, что экземпляров одновременно может быть несколько.
Код AS3:
private function placeBullet (mc:Object)
{
	var bullet:Bullet = new Bullet();
	addChild(bullet);
	bullet.x = mc.x;
	bullet.y = mc.y;
	//
	bullet.addEventListener(Event.ENTER_FRAME, moveBullet);
}
Далее я создаю функцию moveBullet:
Код AS3:
private function moveBullet(event:Event)
{
 
}
... и понимаю, что не могу обратиться напрямую к экземпляру bullet, т.к. он создан внутри функции placeBullet и не виден снаружи. Если же его выносить наружу, то невозможно создать несколько одновременных экземпляров - предыдущий будет удаляться.
Т.е. мне бы хотелось иметь возможность сделать что-то похожее на это:
Код AS3:
bullet.addEventListener(Event.ENTER_FRAME, moveBullet(bullet));
И это только пол-беды. Двигать пулю мне бы хотелось в направлении, равном
Код AS3:
mc.rotation
Соответственно, хотелось бы иметь следующую картину:
Код AS3:
private function placeBullet (mc:Object)
{
	var bullet:Bullet = new Bullet();
	addChild(bullet);
	bullet.x = mc.x;
	bullet.y = mc.y;
	//
	bullet.addEventListener(Event.ENTER_FRAME, moveBullet(bullet, mc.rotation));
}
//
private function moveBullet(event:Event, mc:Object, angle:Number)
{
	mc.x += speed*Math.cos(angle);
	mc.y += speed*Math.sin(angle);
}
Понятно, что моего решения не существует... Интересует выход из данной ситуации, что посоветуете?