我正在尝试使用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;
}
}
答案 0 :(得分:0)
首先,我建议使用单个事件函数来调用需要更新的所有其他函数。
stage.addEventListener(Event.ENTER_FRAME, loop);
function loop(event:Event):void {
birdFall();
birdFly();
movePipesAndLines();
}
其次,您并不想从游戏开始时添加所有管道。我会想象 Flappy Bird 在屏幕移动时附加新的 Pipe 对象。这样做效率更高。
除此之外代码看起来不错。但是,我想看看 Pipe 对象中的内容。也许Pipe。 x 是 int 而不是数字?