用于定位敌人的AS3循环

时间:2013-05-02 11:12:29

标签: actionscript-3

我正在开发一个像太空入侵者一样的游戏。到目前为止,我已经在这样的for循环中产生了敌人:

for (var a=0; a<6; a++)
{ 
    var bd:MovieClip = new bdenemy();
    enemy1[a] = bd;
    addChild(enemy1[a]);
    enemy1[a].x = 50 + Math.random() * 700;
    enemy1[a].y = 50;
}

然而,当我运行游戏时,敌人只会在这些参数中产生,大部分时间都会重叠。我怎么能做到这一点,以便每个新的敌人与前一个相距x,使用这样的数组呢? 谢谢。

1 个答案:

答案 0 :(得分:2)

优化

在此之前,你应该在循环之外声明你的变量,以避免存储n个变量。

答案

填充宽度

您可以将先前的x存储在变量中,并确保每个敌人之间的差距最小。如果你想用敌人填充你的屏幕宽度,无论它们有多少。

var bd:MovieClip;
var previousX:uint=0;
while (previousX + 150 < stage.stageWidth)
{ 
    bd = new bdenemy();
    enemy1.push(bd);
    addChild(bd);
    bd.x = previousX + 50 + Math.random() * 100;
    bd.y = 50;
}

50是两个敌人之间的最小差距。

固定金额

如果你想拥有6个敌人,可以在屏幕上整齐地发送,你可以为每个敌人引入一个位置范围。

var bd:MovieClip;
const N_ENEMIES:uint = 6;
var span:uint = stage.stageWidth / N_ENEMIES;
for (var i:int=0; i < N_ENEMIES; i++)
{ 
    bd = new bdenemy();
    enemy1[i] = bd;
    addChild(bd);
    bd.x = i * span + Math.random() * span;
    bd.y = 50;
}

在那里,每个敌人在其跨度内都会有一个随机位置。