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() メソッドが呼び出されます。

ムービークリップ オブジェクトを取得してトレースする方法を知っています。

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

画面に複数の Feathers Buttons (MovieClips から派生したもので、プレーンな MovieClips の場合も原理は同じです) があり、それぞれに個別のリスナーを持ちたくないという問題にどのようにアプローチしたかを次に示します。オブジェクトを作成するとき、それぞれがタッチを同じイベント リスナーに送信します。次に、作成後にすべてのボタンを詰め込むベクターがあります。

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()
}

同じシステムを簡単に拡張して、Touch イベントを送出する他のタイプのオブジェクトを処理できます。

私が理解していることから、あなたは似たようなことを試みましたが、うまくいきませんでした。正しいイベント タイプ (古い Flash タッチ イベントではなく、starling.events.Event) を使用しましたか?

于 2013-10-27T23:35:17.623 に答える