2012-06-08 34 views
0

我遇到了一些非常简单的碰撞检测问题。这里是我的代码,我现在用的那一刻:碰撞检测不会返回任何东西

- (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语句给我提供了这个问题。

如果你可以给我任何解决方案,为什么这不起作用,或任何其他方式来使它工作,我会很感激。谢谢。

+0

是self.sprite还是self.swat零?你还应该NSLog边界框,看看他们是否实际上碰撞。 –

+0

@iBradApps sprite.boundingBox日志{{0,0},{0,0}} swat.boundingBox日志{{240,10},{0,0}} 第一组坐标似乎成为他们发起的位置 – akuritsu

+0

您是否在更新方法中使用NSLogging?你自己应该看到他们通过NSLog碰撞。一旦你确认了,那么你可以重构你的代码。 –

回答

0

CGRectContainsRect返回true。你确定你需要“包含”检查,而不是“交叉”(CGRectIntersectsRect)检查吗?

+0

确实,CGRectIntersectsRect会更像我在找的东西,但它仍然不起作用。 – akuritsu

-1

尝试使用,如果第二个矩形是在第一包含一个CGRectIntersectsRect()

+0

你没有解释得很好...... – akuritsu