我遇到了一些非常简单的碰撞检测问题。这是我目前正在使用的代码:
- (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语句给我提出了问题。
如果你可以给我任何解决方案,说明为什么这不起作用,或任何其他方法让它运作,我将不胜感激。感谢。
答案 0 :(得分:0)
如果第二个矩形包含,则CGRectContainsRect返回true。您确定需要“包含”检查,而不是“相交”(CGRectIntersectsRect)检查吗?
答案 1 :(得分:-1)
尝试使用CGRectIntersectsRect()