我实例化了一个精灵,然后当它与第二个精灵发生碰撞时,该精灵的孩子被删除了:
if (CGRectIntersectsRect(spriteOne.boundingBox, self.swat.boundingBox))
{
if (spriteOne.tag == 0){
[self removeChild:spriteOne cleanup:YES];
}
if (spriteOne.tag == 1){
[self removeChild:spriteOne cleanup:YES];
}
}
这是我想要的方式,精灵从屏幕上消失。但是,似乎boundingBox仍然存在,即使图像不存在,这也会导致评分等问题...所以,我想知道的是如何“禁用激活”精灵的boundingBox以便当两个精灵第一次碰撞时,会检测到碰撞,但在此之后的任何时间,它都不会。
提前致谢。
答案 0 :(得分:0)
据我了解,碰撞后删除精灵应该有一些问题。
你会试试吗?
if (CGRectIntersectsRect(spriteOne.boundingBox, self.swat.boundingBox))
{
if (spriteOne.tag == 0){
[spriteOne removeFromParentAndleanup:YES];
}
if (spriteOne.tag == 1){
[spriteOne removeFromParentAndleanup:YES];
}
}
您是否尝试添加一些NSLog跟踪以查看是否真的删除了精灵?
答案 1 :(得分:0)
您必须保留spriteOne。如果有充分理由保留它,请执行以下操作:
if ( spriteOne.visible && CGRectIntersectsRect(spriteOne.boundingBox, self.swat.boundingBox))
{
if (spriteOne.tag == 0){
spriteOne.visible=NO;
}
if (spriteOne.visible && spriteOne.tag == 1){
spriteOne.visible=NO;
}
}
稍后,当您再次需要spriteOne时,只需将其可见性设置为YES;
如果没有,你有泄漏,并执行此操作:
if ( spriteOne && CGRectIntersectsRect(spriteOne.boundingBox, self.swat.boundingBox))
{
if (spriteOne.tag == 0){
[self removeChild:spriteOne cleanup:YES];
self.spriteOne=nil; // assumes you have a property for spriteOne
}
if (spriteOne && spriteOne.tag == 1){
[self removeChild:spriteOne cleanup:YES];
[spriteOne release]; // assumes no property for spriteOne
spriteOne=nil; // dont forget this ! beware of zombies
}
}