在Flappy Bird游戏中移动管道查询

时间:2014-10-22 23:37:45

标签: arrays actionscript-3

我正在尝试使用Action Script 3作为学校项目在Adobe Flash中构建类似Flappy Bird的游戏。我正在使用一个Pipe对象数组来创建每个级别的管道数量(在这个阶段我的代码是一个级别/阶段)。

我有一个问题,在我创建Pipes数组并将每个Pipe对象添加到舞台后,我尝试使用其他函数移动管道,迭代数组并将x维值更改为每个管道对象,但它不起作用。

这是我的代码:

import flash.events.MouseEvent;

stop();
Bird_mc.stop();
//array of pipes;
var pipeArray:Vector.<Pipe >  = new Vector.<Pipe >   ;

var birdVelocity:int = 0;
var stageGravity:int = 2;

stage.addEventListener(Event.ENTER_FRAME,birdFall);
stage.addEventListener(Event.ENTER_FRAME,createPipesAndLines);
stage.addEventListener(Event.ENTER_FRAME,movePipesAndLines);
stage.addEventListener(MouseEvent.CLICK,birdFly);

function birdFall(event:Event):void
{
    Bird_mc.y +=  birdVelocity;
    birdVelocity +=  stageGravity;
}

function birdFly(event:MouseEvent):void
{
    birdVelocity = -16;
    Bird_mc.play();
}

/*Move Pipes and Lines to the left - TO BE MADE*/
function createPipesAndLines(event:Event):void
{
    for (var i:int = 0; i<10; i++)
    {   //use of of-else to separate the pipes up and down and rotate em
        if (i%2==0)
        {
            pipeArray.push(new Pipe());
            addChild(pipeArray[i]);
            pipeArray[i].x = i * 250;
            pipeArray[i].y = 50;
        }
        else
        {
            var tempPipe:Pipe = new Pipe();
            tempPipe.rotation = 180;
            pipeArray.push(tempPipe);

            addChild(pipeArray[i]);
            pipeArray[i].x = i * 300;
            pipeArray[i].y = 400;
        }
    }
}
//move the pipes to left
function movePipesAndLines(event:Event):void
{
    for (var i:int = 0; i<10; i++)
    {
        pipeArray[i].x -=  0.5;

    }
}

1 个答案:

答案 0 :(得分:0)

首先,我建议使用单个事件函数来调用需要更新的所有其他函数。

stage.addEventListener(Event.ENTER_FRAME, loop);

function loop(event:Event):void {
    birdFall();
    birdFly();
    movePipesAndLines();
}

其次,您并不想从游戏开始时添加所有管道。我会想象 Flappy Bird 在屏幕移动时附加新的 Pipe 对象。这样做效率更高。

除此之外代码看起来不错。但是,我想看看 Pipe 对象中的内容。也许Pipe。 x int 而不是数字