不必要的布尔变量完全改变代码

时间:2014-03-08 05:09:51

标签: actionscript-3 flappy-bird-clone

好的,所以我早些时候提出了这个很棒的想法来练习ActionScript 3.0,我决定创建一个脆弱的鸟类克隆。我有基本的鸟类动作,所以鸟可以适当地上下移动,他会旋转,看起来很光滑。

但是我遇到了布尔变量和if语句的问题。它并没有真正困扰那里的代码,但我想知道为什么它正在做它正在做的事情。如果您使用自己的名为bird的符号在flash中运行此代码,它将正常工作。你可以按任何按钮,鸟儿会飞起来,然后倒下来。

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;
...

如果你需要确切地知道发生了什么,除了鸟会快速移动并且每次按下按钮时移动速度更快,它几乎都会起作用。

请帮助,我还在学习,我一周前就开始了。

1 个答案:

答案 0 :(得分:1)

您已将tap1的听众TouchEvent.TOUCH_TAP添加到Stage,但在startGame中您将其从当前对象中删除,而不是Stage (第17和18行)。如果您没有该布尔值,则每次点按都会调用startGame

解决方案是正确删除以前的侦听器:

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