![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Sep 2008
Сообщений: 102
|
Всем привет.
Как можно вызвать функцию с обработчиком события без использования ООП ? |
|
|||||
|
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Цитата:
|
|
|||||
|
Регистрация: Sep 2008
Сообщений: 102
|
stage.addEventListener(Event.ENTER_FRAME, bulletFire, false, 0, true); function bulletFire(evt: Event): void{ bullet.x+=Math.cos(bullet.rotation * Math.PI / 180) * 5; bullet.y+=Math.sin(bullet.rotation * Math.PI / 180) * 5; } // Стрельба персонажа stage.addEventListener(MouseEvent.MOUSE_DOWN, Fire, false, 0, true); function Fire(evt: MouseEvent): void { var bullet:MovieClip = new Bullet (); addChild(bullet); bullet.rotation = soldier.rotation; bullet.x = soldier.x + Math.cos(bullet.rotation * Math.PI / 180) * 25; bullet.y = soldier.y + Math.sin(bullet.rotation * Math.PI / 180) * 25; soldier.soldier2.gotoAndPlay(11); soldier.soldier2.gun.play(); bulletFire(evt) ------------------------- ДАННАЯ ФУНКЦИЯ НЕ ВЫЗВАЕТСЯ } |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Функция-то наверняка вызывается, просто она понятия не имеет о bullet — локальной переменной из другой функции.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Sep 2008
Сообщений: 102
|
Как я понимаю надо использовать MovieClip(root) ?
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
var bullet:MovieClip — локальная переменная другой функции. К ней нет и не может быть доступа ниоткуда, кроме как в теле той функции, в которой Вы ее объявили (создали). Мало того, она просто исчезает, как только функция отработает (десятые-сотые доли миллисекунды). Исчезает переменная, ссылка на клип, но не сам клип-объект.
Соответственно Вам нужно вывести ссылку на эту пулю либо в тело Класса (для общего пользования), либо передать его прямиком в функцию, которой эта ссылка нужна для работы с пулей. Если пуля одна, достаточно вынести объявление переменной bullet в тело класса. Если предполагается более одной, то стоит создать в теле класса массив, и заносить пули в него при создании.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Sep 2008
Сообщений: 102
|
Wolsh, спасибо большое за подробный ответ. А суть вопроса и была как это реализовать без использования ООП. Я использую процедурное программирование
|
|
|||||
|
Вынести bullet за тело функции, тем самым лишив её титула локальной. Я ещё подписался по клику, чтобы она далеко не улетела.
var bullet:MovieClip = new Bullet (); function bulletFire(evt: Event): void{ bullet.x+=Math.cos(bullet.rotation * Math.PI / 180) * 5; bullet.y+=Math.sin(bullet.rotation * Math.PI / 180) * 5; } // Стрельба персонажа stage.addEventListener(MouseEvent.MOUSE_DOWN, Fire, false, 0, true); function Fire(evt: MouseEvent): void { addChild(bullet); bullet.rotation = soldier.rotation; bullet.x = soldier.x + Math.cos(bullet.rotation * Math.PI / 180) * 25; bullet.y = soldier.y + Math.sin(bullet.rotation * Math.PI / 180) * 25; soldier.soldier2.gotoAndPlay(11); soldier.soldier2.gun.play(); stage.addEventListener(Event.ENTER_FRAME, bulletFire, false, 0, true); }
__________________
Тут мужик танцует и поёт про флэш |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|