0

方向ボタンとダッシュボタンがあります。私が実現したいのは、スプリント ボタンを押している間、プレイヤーが 2 倍の速さで移動することです。次にスプリント ボタンを離すと、プレーヤーは通常の速度で歩き続けます。ただし、方向ボタンを押したままでも、スプリント ボタンを離すとプレーヤーが停止します。

public function addControllerListeners(){
        controller.leftButton.addEventListener(TouchEvent.TOUCH_ROLL_OVER, moveCharLeft);
        controller.leftButton.addEventListener(TouchEvent.TOUCH_BEGIN, moveCharLeft);
        controller.leftButton.addEventListener(TouchEvent.TOUCH_END, playerStop);
        controller.leftButton.addEventListener(TouchEvent.TOUCH_OUT, playerStop);
        controller.leftButton.addEventListener(TouchEvent.TOUCH_ROLL_OUT, playerStop);

        sprintButton.addEventListener(TouchEvent.TOUCH_ROLL_OVER, playerSprint);
        sprintButton.addEventListener(TouchEvent.TOUCH_BEGIN, playerSprint);
        sprintButton.addEventListener(TouchEvent.TOUCH_END, playerStopSprint);
        sprintButton.addEventListener(TouchEvent.TOUCH_OUT, playerStopSprint);
        sprintButton.addEventListener(TouchEvent.TOUCH_ROLL_OUT, playerStopSprint);
}

public function playerSprint(e:Event = null) {
        playerChar.sprint = true;
        trace("Player Sprint");
}
public function playerStopSprint(e:Event = null) {
        playerChar.sprint = false;
        trace("stopSprinting");
}
public function moveCharLeft(event:TouchEvent):void{
        playerChar.setWalk("left");
}
public function playerStop(event:TouchEvent):void {
        var target:String = event.target.name;
        if(target == "upButton" || target == "rightButton" || target == "downButton" || target == "leftButton"){
            trace("Player Stopped from: " + event.target.name + " - " + event.currentTarget.name);
            playerChar.direction = "idle";
        }
    }

プレイヤーの停止関数のトレースは、ターゲット名が押されていたコントローラーのボタンであると述べています。離すボタンはスプリントボタンなのに。

ボタンがステージに追加されたのに役立つ場合。それが違いを生むべきではないと思いますが、あなたは決して知りません。

4

1 に答える 1

1

イベント (タッチ) は永続的ではありません。イベントが発生すると、それが完了し、次のイベントの発生をポーリングする必要があります。自動繰り返しは OS の機能であり、(通常) 別の同様のイベントによって中断されます (2 回目のタッチで最初のタッチが停止すると思います)。

特定の条件が満たされているかどうかを示すフラグを使用します。このブール値を手動でオンまたはオフにする必要がありますが、知る必要があることを追跡できます。(これと同様の例は、この SO コメントにあります: https://stackoverflow.com/a/7976038/516537。これはたまたま、他のキーボード イベントと繰り返して共存できるキーボード イベントの場合ですが、フラグの使用を参照してください。) したがって、イベントをリッスンしますが、次のことも行います。

  1. 条件がアクティブになったときにフラグを立てます。
  2. 条件が非アクティブになったときにフラグを立てます。
  3. 複数のフラグがオンになっていることを確認して、複雑な条件を有効にします。

あなたが得るのは、イベントの永続性です。TOUCH_BEGIN(またはその他の開始) イベントが発生するが、 (またはその他の終了) イベントが発生しない場合TOUCH_END、フラグは、タッチ イベントがまだ存在することを知る方法になります。

これらすべての注意点は、イベントをポーリングする方法が少し異なることです。Event.ENTER_FRAMEどのイベントがまだアクティブかをチェックし続けるには、イベント リスナー を追加する必要があります。

HTH。

于 2012-04-23T03:55:07.873 に答える