在我的Starling游戏中,通过单击要移动的屏幕来控制玩家精灵。由于(AFAIK)你不能在精灵中发生在外面一个精灵激活处理程序的触摸事件,我把处理程序放在游戏对象中。以下是它的基本概念:
要创建我的监听器,我在我的游戏对象中执行此操作:
this.addEventListener(TouchEvent.TOUCH, onTouch);
但onTouch永远不会被调用(我甚至尝试在其中放置trace()
。)
我在这里错过了什么吗?
答案 0 :(得分:1)
好吧,你可以在sprite之外创建事件来触发sprite的处理程序,为此,你不要将监听器附加到sprite,而是附加到其他一些对象,通常是stage。但是,请检查舞台是否可用。处理舞台呈现的最佳方式是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.
}