GMSprite *bulletMove;
int bulletCount = [bullets count];
for(int i = 0; i < bulletCount; i++)
{
if(bulletMove.position.x > 500)
{
[self removeChild:[bullets objectAtIndex:i] cleanup:YES];
}
}
如何从数组中移除子元素以及数组中的对象,以便bulletCount向下整数并将数组调整为已移除的对象
答案 0 :(得分:0)
使用
[bullets removeObjectAtIndex:i];
如何从数组中移除子项以及中的对象 数组,以便bulletCount向下整数并调整数组 移除对象
使用上述方法将从索引i中删除对象,并且所有后续对象都将向上移动。
答案 1 :(得分:0)
使用以下代码:
[bullets removeObjectAtIndex:i];
从bulet数组中获取项目符号并使用下面的代码。
[bullet removeFromParentAndCleanup:YES];
答案 2 :(得分:0)
GMSprite *bulletMove;
for(int i = 0; i < [bullets count]; )
{
if(bulletMove.position.x > 500)
{
[bullets removeObjectAtIndex:i];
} else {
i++;
}
}
在其体内操纵for循环的索引varialbe并不是完全好的样式。您可能希望使用其他类型的循环(do-while左右)重新构造此建议。但是,基本思路是[bullest count]将始终为您提供阵列中当前的条目数量。如果不删除当前对象,则只能增加索引。如果你删除它,你的索引是10(例子),那么下一个要检查的是再次为10。如果你也删除了那个,那么下一个要针对500检查的是10的agein。所以要么删除它,要么增加索引。并且作为循环的退出条件,检查索引与数组中对象的当前数量。
编辑:问题的第二部分:如果你正确地进行内存管理,无论你是否使用ARC,removeObjectAtIndex都应该正确删除对象本身。 (除非它的保留计数高于1,否则仍然存在另一个强引用。但即使这样,它也会将保留计数减少1并完全正确。)