Objective c NSMutable数组计数在删除子项后不更改 GMSprite*bulletMove; int bulletCount=[项目符号计数]; 对于(int i=0;i500) { [self-removeChild:[bullets objectAtIndex:i]清理:是]; } }

Objective c NSMutable数组计数在删除子项后不更改 GMSprite*bulletMove; int bulletCount=[项目符号计数]; 对于(int i=0;i500) { [self-removeChild:[bullets objectAtIndex:i]清理:是]; } },objective-c,cocos2d-iphone,Objective C,Cocos2d Iphone,如何从数组中删除子对象以及数组中的对象,以便bulletCount向下调整一个整数,并将数组调整为删除的对象使用 GMSprite *bulletMove; int bulletCount = [bullets count]; for(int i = 0; i < bulletCount; i++) { if(bulletMove.position.x > 500) { [self removeChild:[bullets objec

如何从数组中删除子对象以及数组中的对象,以便bulletCount向下调整一个整数,并将数组调整为删除的对象使用

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向下移动一个整数并调整数组 到已删除的对象

使用上述方法将从索引i中删除该对象,并且以下所有对象将向上移动一个。

使用以下代码:

[bullets removeObjectAtIndex:i];
从bulet数组中获取bullet对象并使用下面的代码

[bullets removeObjectAtIndex:i];
GMSprite*bulletMove;
对于(int i=0;i<[子弹计数];)
{        
如果(bulletMove.position.x>500)
{
[项目符号移除对象索引:i];
}否则{
i++;
}
}
操纵for循环的索引变量be并不是一种很好的风格。您可能希望使用其他类型的循环(do while或so)重新构造此建议。不过,基本的想法是,[bullest count]将始终为您提供数组中当前的条目数。并且只有在不删除当前对象的情况下,索引才必须增加。如果将其删除,索引为10(示例),那么下一个要检查的索引又是10。如果你也删除了,那么下一个要检查的500是年龄在10。所以要么删除它,要么增加索引。作为循环的退出条件,根据数组中对象的当前数量检查索引


编辑:问题的第二部分:如果你的内存管理正确,不管你是否正确,removeObjectAtIndex应该正确地删除对象本身。(除非它的保留计数高于1或另一个强引用仍然存在。但即使如此,它也会将保留计数减少1并做正确的事情。)

这就是为什么(int i=bulletCount-1;i>=0;i-->)更容易使用
来避免索引移动问题的原因。使用此选项时,精灵仍会留在屏幕上,这会占用内存吗?我如何删除精灵图像我所做的是创建数组对象的临时对象,然后删除数组对象,然后自行删除临时对象,你认为这种方法可以吗?@user2121776:你是从自身移动的,而不是从子弹移动的。我猜你问过如何记忆和缩小子弹的大小,并将其全部移向数组的开头。当我使用这个时,精灵仍然留在屏幕上,这会占用内存吗,我如何删除精灵图像/我所做的是为数组对象创建了一个临时值,然后删除数组对象,然后自删除临时对象,你认为这种方法可以吗?
[bullet removeFromParentAndCleanup:YES];
GMSprite *bulletMove;


for(int i = 0; i < [bullets count]; )
{        
    if(bulletMove.position.x > 500)
    {
        [bullets removeObjectAtIndex:i];
    } else {
        i++;
    }
}