0

非常に単純な衝突検出で問題が発生しています。現時点で使用しているコードは次のとおりです。

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

'sprite' と 'swat' は、サブクラス化された CCSprite であり、以下を使用してプロパティとして宣言されています。

@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");
}}

両方のコード セットで「更新」がログに記録されるため、更新は正しく機能しています。問題を引き起こしているのは if ステートメントだけです。

これが機能しない理由、またはそれを機能させる別の方法についての解決策を教えていただければ幸いです。ありがとう。

4

2 に答える 2

0

CGRectContainsRectは、2番目の長方形が最初に含まれている場合にtrueを返します。「intersects」(CGRectIntersectsRect)チェックではなく、「contains」チェックが必要ですか?

于 2012-06-08T08:04:42.523 に答える
-1

を使用してみてくださいCGRectIntersectsRect()

于 2012-06-08T01:29:08.920 に答える