【问题标题】:AS3 loop for positioning enemies用于定位敌人的 AS3 循环
【发布时间】:2013-05-02 11:12:29
【问题描述】:

我正在开发一款功能类似于太空入侵者的游戏。到目前为止,我让敌人在这样的 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 距离? 谢谢。

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:

    优化

    在任何事情之前,你应该在循环之外声明你的变量以避免存储 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;
    }
    

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

    【讨论】:

    • 非常感谢,跨度的想法正是我想到的产卵。
    猜你喜欢
    • 2013-08-24
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 2019-11-29
    • 2015-03-09
    • 2014-05-12
    • 1970-01-01
    • 2011-06-20
    相关资源
    最近更新 更多