0

好的,所以我早先想出了这个绝妙的主意来练习 ActionScript 3.0,我决定创建一个 flappy bird 克隆。我有基本的鸟向下运动,所以鸟可以适当地上下移动,他会旋转,看起来很光滑。

但是我对布尔变量和 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;
...

如果您需要确切地知道发生了什么,它的功能几乎相同,除了鸟会飞快地移动并且每次按下按钮时都会移动得更快。

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

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 回答