Сенсорные события в игровом объекте

В моей игре 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.
}
Другие вопросы по тегам