我正在努力解决NSMutableArrays
并需要一些帮助。
我正试图测试通过关卡,传统马里奥散落的“玩家”和“硬币”的碰撞。
我收到崩溃报告' * 集合< __ NSArrayM:0x4bf6d0>在被列举时被突变。'
我遵循了类似的精灵碰撞方法: http://geekanddad.wordpress.com/2010/06/22/enemies-and-combat-how-to-make-a-tile-based-game-with-cocos2d-part-3/
出于某种原因,如果只产生一枚硬币,它一切正常 - 但是如果> 1枚硬币产生任何硬币碰撞都会引发撞击。
我理解这是一个noob问题,与[delete addObject:nuCoin]有关; - 我环顾四周并阅读制作一个子阵列来处理删除功能 - 但我很明显丢失了,并希望得到帮助,提前谢谢!
-(void) coinCollision {
NSMutableArray *coinsToDelete = [[NSMutableArray alloc] init];
NSMutableArray *delete = [[NSMutableArray alloc] init];
for (CCSprite *nuCoin in _coins) {
CGRect coinRect = CGRectMake((nuCoin.position.x+1) - (nuCoin.contentSize.width/4),
(nuCoin.position.y+5) - (nuCoin.contentSize.height/4),
nuCoin.contentSize.width/3.5,
nuCoin.contentSize.height/7);
for (CCSprite *Player in _player) {
CGRect playerRect = CGRectMake(player.position.x - (player.contentSize.width/4),
player.position.y - (player.contentSize.height*.05),
player.contentSize.width*.05,
player.contentSize.height/2);
if (CGRectIntersectsRect(coinRect, playerRect)) {
[coinsToDelete addObject:nuCoin];}
}
for (CCSprite *nuCoin in coinsToDelete) {
[[SimpleAudioEngine sharedEngine] playEffect:@"Coin.mp3"];
[_coins removeObject:nuCoin];
[delete addObject:nuCoin];
[map removeChild:nuCoin cleanup:YES];
}
}
[delete release];
}
答案 0 :(得分:0)
您无法在快速枚举for(...in...)
循环内向可变数组添加或删除对象。您需要开发一些其他逻辑来使其工作(例如,存储要删除的对象的索引,或以其他方式将它们标记为可删除,并在完成for循环后,一步删除所有这些。)
示例:
NSMutableArray *markedAsDeletee = [NSMutableArray array];
for (CCSprite *sprite in array)
{
if (/* decide wheteher this sprite should be deleted */)
[markedAsDeletee addObject:sprite];
}
[array removeObjectsInArray:markedAsDeletee];