Cocos2d:删除精灵时出现黑屏
我目前正在教程http://www.raywenderlich.com/25736/how-to-make-a-simple-iphone-game-with-cocos2d-2-x-tutorial。 当忍者之星击中怪物时,我会遇到一些问题。我的代码是:Cocos2d:删除精灵时出现黑屏
- (void)update:(ccTime)dt {
NSMutableArray *projectilesToDelete = [[NSMutableArray alloc] init];
for (CCSprite *projectile in _projectiles) {
NSMutableArray *monstersToDelete = [[NSMutableArray alloc] init];
for (CCSprite *monster in _monsters) {
if (CGRectIntersectsRect(projectile.boundingBox, monster.boundingBox)) {
[monstersToDelete addObject:monster];
}
}
for (CCSprite *monster in monstersToDelete) {
[_monsters removeObject:monster];
[self removeFromParentAndCleanup:YES];
}
if (monstersToDelete.count > 0) {
[projectilesToDelete addObject:projectile];
}
[monstersToDelete release];
}
for (CCSprite *projectile in projectilesToDelete) {
[_projectiles removeObject:projectile];
[self removeChild:projectile cleanup:YES];
}
[projectilesToDelete release];
}
这工作好,不会崩溃,但是当我打一个怪物有弹,屏幕变黑的模拟器。没有错误或任何东西。我记录了CGRectIntersectRect,并且它按照它应该记录的那样记录。问题是,当这种情况发生时,它全部变黑。任何想法为什么?
我看了看教程,和我确定了上述评论的一行:
[self removeChild:monster cleanup:YES];
尝试。
我通常更喜欢'[怪物removeFromParentAndCleanup:YES]',这样,当你改变“怪物”的父亲时,你的代码不会中断。 – Sebastian 2013-03-07 21:08:51
原则上是真的......我刚刚从教程中直接复制了这一行,以便让Sophia再次出发。但是因为自己似乎是怪物的父母,在这种情况下并不是很大的区别。 – YvesLeBorg 2013-03-07 21:12:09
你正在做[self removeFromParentAndCleanup:YES],它会从父级移除当前图层。所以你会得到一个黑屏。
您可能想要从图层中移除子怪物。
[self removeFromParentAndCleanup:YES];在这方面什么是自我?也许只是可能 – YvesLeBorg 2013-03-07 20:37:57
@YvesLeBorg难道这不是怪物对象吗? – 2013-03-07 20:42:14
不确定这里的对象模型是什么,可能是嵌入游戏控制器的层。不确定。这听起来很“腥”,运行一段逻辑的对象在做这项工作的时候会自行删除。也许OP在主循环之后需要另一个循环来遍历怪物来删除和删除它们。 – YvesLeBorg 2013-03-07 20:44:55