我只是在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进行编程。
答案 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个元素(除非你想偏离你的舒适区,但效率不是问题所在。)并且确实使用拼接,因为在这种情况下效率不是问题。