0

我只是 as3 的初学者,我对数组和对象(movieclip)没有什么问题。首先,如果您想将对象添加到数组array.push(object)中,不是吗?如果你想用array.splice(index, 1). 那么如果我的代码就像这个一样,如果你只想要数组中的 10 个对象,那么停止向数组添加对象怎么样?

private function RandomEnemy():void {
    var enemy:Enemy = new Enemy(RandomRange(700, 1000), 350);
    enemy.addEventListener(Event.REMOVED_FROM_STAGE, RemoveFromArray);
    layerChar.addChild(enemy);
    enemies.push(enemy);
}

private var remaining:int = 10;
private function RemoveFromArray(e:Event):void {
    removeEventListener(Event.REMOVED_FROM_STAGE, RemoveFromArray);
    var index:int = enemies.indexOf(Enemy(e.currentTarget), 0);
    enemies.slice(index, 1);
    remaining--;
    trace(remaining);
    if (remaining==0) {
        //stop the adding object in array
    }
}

对不起我的英语不好,我仍然不知道如何用 as3 和 flash 编程。

4

3 回答 3

1

您可以检查数组的长度属性以查看其中有多少项。

enemies.length

然后,您可以根据该值做任何您想做的事情。查看您的代码,您似乎应该将整个内容放在一个 if 块中,以检查数组中是否有任何项目,然后再尝试从中删除。

也许这样的东西是你想要的?

private function RemoveFromArray(e:Event):void {
    // not quite sure what you were trying to do with this line...
    removeEventListener(Event.REMOVED_FROM_STAGE, RemoveFromArray);

    // check to see if there are any items in the enemies array to remove
    if (enemies.length > 0){
        var index:int = enemies.indexOf(Enemy(e.currentTarget), 0);
        //enemies.slice(index, 1);
        // splice() is what you may actually want, as it adds/removes elements from the array
        enemies.splice(index, 1);
    } else {
        trace("No more items in enemies array.");
    }
}
于 2013-02-01T09:38:50.850 回答
0

1)您还可以在数组周围创建自定义包装器,在添加任何内容之前检查数组的长度

2)看一下Vector类,可以固定它的长度,在很多情况下比Arrays更有效。

3)如果要移除的对象位于数组的开头或结尾,不要使用拼接,使用弹出或移位,因为拼接非常昂贵

于 2013-02-01T11:55:34.850 回答
0

我想最简单的解决方案是在添加对象之前检查数组是否有 10 个元素:

if (enemies.length < 10){
    layerChild.addChild(enemy);
    enemies.push(enemy);
}

此外,您似乎拼错spliceenemies.slice(index, 1). 而且我知道您是新手,但最好还是坚持使用尽可能少的功能以避免混淆。

脱离 Neil 的观点,向量通常优于数组,但不要固定向量的长度,因为其中不会只有 10 个元素(除非你想偏离你的舒适区,但效率不是这里不是问题)。并且一定要使用拼接,因为在这种情况下效率又不是问题。

于 2013-02-01T16:02:23.527 回答