限制在actionscript 3中添加数组中的对象

时间:2013-02-01 09:36:09

标签: actionscript-3 flash flash-cs6

我只是在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进行编程。

3 个答案:

答案 0 :(得分: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.");
    }
}

答案 1 :(得分:0)

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

2)看看Vector类,你可以修复它的长度,在许多情况下它比Arrays更有效。

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

答案 2 :(得分:0)

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

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

此外,您似乎在splice中拼错了enemies.slice(index, 1)。而且我知道你是新人,但最好是尽可能少地使用功能以避免混淆。

脱离Neil的观点,矢量通常优于阵列,但不会固定矢量的长度,因为你不会只有10个元素(除非你想偏离你的舒适区,但效率不是问题所在。)并且确实使用拼接,因为在这种情况下效率不是问题。