碰撞检测不会返回任何内容

时间:2012-06-08 00:33:49

标签: ios cocos2d-iphone collision-detection sprite cgrect

我遇到了一些非常简单的碰撞检测问题。这是我目前正在使用的代码:

- (void) update:(ccTime)dt{
NSLog(@"update");
if (CGRectIntersectsRect([self.sprite boundingBox], [self.swat boundingBox])) {
    NSLog(@"detected");
}}

'sprite'和'swat'是使用以下声明为属性的子类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语句给我提出了问题。

如果你可以给我任何解决方案,说明为什么这不起作用,或任何其他方法让它运作,我将不胜感激。感谢。

2 个答案:

答案 0 :(得分:0)

如果第二个矩形包含,则CGRectContainsRect返回true。您确定需要“包含”检查,而不是“相交”(CGRectIntersectsRect)检查吗?

答案 1 :(得分:-1)

尝试使用CGRectIntersectsRect()