Сенсорные события в игровом объекте
В моей игре Starling спрайт игрока контролируется нажатием на экран, куда вы хотите перейти. Поскольку (AFAIK) у вас не может быть событий касания, которые происходят вне обработчиков активации спрайта в спрайте, я поместил обработчики в игровой объект. Вот основная идея, как это происходит:
Чтобы создать моего слушателя, я делаю это в своем игровом объекте:
this.addEventListener(TouchEvent.TOUCH, onTouch);
Но onTouch никогда не вызывается (я даже пытался положить trace()
там).
Я что-то здесь упускаю?
1 ответ
Ну, вы можете делать события, которые происходят вне спрайта, чтобы запускать обработчики спрайта, для этого вы присоединяете слушателей не к спрайту, а к какому-то другому объекту, обычно на сцене. Проверьте, доступна ли сцена, хотя. Лучший способ справиться со сценой - слушатель ADDED_TO_STAGE
событие. Вы помещаете это в конструктор объекта вашего обработчика и помещаете весь осведомленный о стадии код в этот слушатель.
public function Handler() {
if (stage) init(null);
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point. This is where should stage-aware code start
stage.addEventListener(TouchEvent.TOUCH, onTouch);
// at this point stage is populated and valid, thus we can use stage reference
// without fear of null pointer.
}