0

さて、ActionScript 3.0 を練習するためにこの素晴らしいアイデアを以前に思いついたので、ゆるい鳥のクローンを作成することにしました。私は基本的な鳥の動きを下に持っているので、鳥は適切に上下に動くことができ、回転し、とても滑らかに見えます.

しかし、ブール変数と if ステートメントに問題があります。そこにあるコードを実際に気にすることはありませんが、なぜそれが何をしているのか知りたいです。以下のコードを、bird という独自のシンボルを使用してフラッシュで実行すると、問題なく動作します。任意のボタンを押すと、鳥が飛んで戻ってきます。

var hasGameStarted:Boolean=false
//input stuff
stage.addEventListener(TouchEvent.TOUCH_TAP, tap1);
stage.addEventListener(KeyboardEvent.KEY_DOWN, tap1);

function tap1(event):void{
    if (!hasGameStarted){
        startGame();
    }
}
function startGame():void{  
    hasGameStarted=true;

    var jumpLevel:int=10
    var jumpLevelCap:int=36

    removeEventListener(KeyboardEvent.KEY_DOWN, tap1);
    removeEventListener(TouchEvent.TOUCH_TAP, tap1);

    stage.addEventListener(Event.ENTER_FRAME, update);
    stage.addEventListener(TouchEvent.TOUCH_TAP, tap2);
    stage.addEventListener(KeyboardEvent.KEY_DOWN, tap2);

    function update(event):void{
        bird.y+=jumpLevel;
        //gravity
        if (jumpLevel<jumpLevelCap){
            jumpLevel+=6;
        }
        //rotation
        if (bird.rotation<100 && bird.rotation>-90 && jumpLevel>0){
            bird.rotation+=jumpLevel;
        }
        if (bird.rotation<100 && bird.rotation>-100 && jumpLevel<0){
            bird.rotation+=jumpLevel*2;
        }
        if (bird.rotation>=100){
            bird.rotation=99;
        }
        if (bird.rotation<-90){
            bird.rotation=-89;
        }
        //out of bounds
        if (bird.y<1){
            killBird();
        }
    }

    function tap2(event):void{
        jumpLevel=-30;
    }

    function killBird():void{

    }
}

hasGameStartedただし、ブール変数に関連するすべてのものをコードから削除するか、コメントを付けて、まったく同じコードを実行すると、プログラムは途方もなく高速になります。このブール値に依存する他の変数はなく、まったく必要ありません。

//var hasGameStarted:Boolean=false
//input stuff
stage.addEventListener(TouchEvent.TOUCH_TAP, tap1);
stage.addEventListener(KeyboardEvent.KEY_DOWN, tap1);

function tap1(event):void{
        //if (!hasGameStarted){
        startGame();
        //}
}
function startGame():void{    
        //hasGameStarted=true;
...

何が起こるかを正確に知る必要がある場合は、鳥がとてつもなく速く動き、ボタンを押すたびに速く動くことを除いて、ほとんど同じように機能します.

助けてください、私はまだ学んでいます、私は一週間前のように始めました.

4

1 に答える 1

1

toのリスナーtap1を追加しましたが、(17 行目と 18 行目)ではなく、現在のオブジェクトからそれを削除しています。そのブール値がない場合、すべてのタップ呼び出しで が呼び出されます。TouchEvent.TOUCH_TAPStagestartGameStage startGame

解決策は、以前のリスナーを正しく削除することです。

stage.removeEventListener(KeyboardEvent.KEY_DOWN, tap1);
stage.removeEventListener(TouchEvent.TOUCH_TAP, tap1);
于 2014-03-08T08:59:49.557 に答える