0

我有一个主要的 1 级类和大量的图像、精灵和电影剪辑作为 1 级的子级。

/**
 * @desc This handles any touch event interactions in the level
 * @param   event
 */

private function touchInteractionHandler(event:TouchEvent):void {

    //register event listeners for touches
    var touchBegan:Touch = event.getTouch(this, TouchPhase.BEGAN);
    var touchEnded:Touch = event.getTouch(this, TouchPhase.ENDED);
    var touchHover:Touch = event.getTouch(this, TouchPhase.HOVER);

    //listen for touches that have just ended
    if (touchEnded) {

        if ( touchEnded.tapCount == 2 ) {

            //get object touched
            var object = event.target;

            //check if player is in walking range. if so then walk to that position of touch.globalx and y
            playerWalkCheck(touchEnded.globalX, touchEnded.globalY);
        }

    }
}

我想在比赛中集中我的触球。而不是在舞台上的所有电影剪辑上都有多个侦听器,我希望主触摸事件来侦听被触摸的内容。

例如,舞台上有一只名叫 Bob 的狗,当我双击它时,它会调用上面的方法 touchInteractionHandler()。

我知道如何获取movieclip对象并追踪它:

trace(event.target);

[object MovieClip]

我似乎不知道如何识别电影剪辑的名称,所以我可以执行以下操作(伪)

if movieclip is bob ->
   //do something with bob
else if movieclip is charlie ->
  //do something wit charlie
else ->
  make player walk to a position e.g. playerWalkCheck(touchEnded.globalX, touchEnded.globalY);

这对我的游戏项目来说是一个真正的负担,解决方案将非常有帮助

4

1 回答 1

0

以下是我在屏幕上有多个 Fe​​athers Buttons(它们源自 MovieClips,原理与普通 MovieClips 相同)来解决问题的方法,并且不希望每个 Feathers Buttons 有一个单独的侦听器。创建对象时,每个对象都会向同一个事件侦听器发送触摸。然后我有一个向量,我在创建后填充所有按钮:

private var vBtns:Vector.<Button>;

在听众中,我有:

private function onBtnTouch(e:starling.events.Event):void
{
    var idxButton:int=vBtns.indexOf(e.currentTarget);
    doSomething(idxButton);//or vBtns[idxButton].something()
}

同一个系统可以很容易地扩展来处理其他类型的分发触摸事件的对象。

据我了解,您尝试了类似的方法,但没有成功。您是否使用了正确的事件类型(starling.events.Event,而不是旧的 Flash 触摸事件)?

于 2013-10-27T23:35:17.623 回答