我遇到了一些非常简单的碰撞检测问题。这里是我的代码,我现在用的那一刻:碰撞检测不会返回任何东西
- (void) update:(ccTime)dt{
NSLog(@"update");
if (CGRectIntersectsRect([self.sprite boundingBox], [self.swat boundingBox])) {
NSLog(@"detected");
}}
“精灵”和“特警”的子类,使用已被定义为一个属性CCSprites:
@property (nonatomic, assign) CCSprite *swat;
@property (nonatomic, assign) enemyClass *sprite; //enemyClass is a subclass of CCSprite
//note that they have also been synthesized
我是否需要改变碰撞检测工作的属性?
我也曾尝试下面的代码:
这只返回更新:
- (void) update:(ccTime)dt{
NSLog(@"update");
if (CGRectIntersectsRect(self.sprite.boundingBox, self.swat.boundingBox)) {
NSLog(@"detected");
}}
这将返回 '发现' 了个遍,即使他们没有碰撞:
- (void) update:(ccTime)dt{
NSLog(@"update");
if (CGRectIntersectsRect(self.sprite.textureRect, self.swat.textureRect)) {
NSLog(@"detected");
}}
在这两组代码中,都记录了'update',所以更新工作正常,只是if语句给我提供了这个问题。
如果你可以给我任何解决方案,为什么这不起作用,或任何其他方式来使它工作,我会很感激。谢谢。
是self.sprite还是self.swat零?你还应该NSLog边界框,看看他们是否实际上碰撞。 –
@iBradApps sprite.boundingBox日志{{0,0},{0,0}} swat.boundingBox日志{{240,10},{0,0}} 第一组坐标似乎成为他们发起的位置 – akuritsu
您是否在更新方法中使用NSLogging?你自己应该看到他们通过NSLog碰撞。一旦你确认了,那么你可以重构你的代码。 –