2013-11-27 3 views
0

В моей игре Starling игровой спрайт контролируется щелчком по экрану, куда вы хотите пойти. Поскольку (AFAIK) вы не можете иметь события касания, которые происходят за пределами спрайт активировать обработчики в спрайте, я помещал обработчики в игровой объект. Вот основная идея о том, как он идет:Прикосновение событий в игровом объекте

Чтобы создать свой слушатель, я делаю это в моем игровом объекте:

this.addEventListener(TouchEvent.TOUCH, onTouch); 

Но onTouch никогда не называется (я даже пытался ставить trace() там).

Я что-то упустил?

+0

С 1 строкой кода мы не можем много сделать, чтобы помочь вам, это выглядит как правильный слушатель. Что такое «игровой» объект? На что он наследуется? Должны ли они получать события касания? – AndySavage

ответ

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. 
} 
+0

Черт, я как раз собирался представить очень большое редактирование на свой пост. Во всяком случае, это паника. Есть ли обходной путь для этого? – Cheezey

+1

Да. Добавьте обработчик события ADDED_TO_STAGE в класс обработчика и поместите этот код в обработчик. Я редактирую это, чтобы показать, как это сделать. – Vesper

+0

Спасибо! Он работает, и теперь я могу продолжать другие раздражающие ошибки в моем коде. – Cheezey