2011-02-05 22 views
1

私はcocos2Dの衝突を検出しようとしています。私はこのコードを使用しています:Cocos2Dの衝突検出

- (void)checkForCollisionSpeedUp:(ccTime)dt 

{

CGRect projectileRect = CGRectMake(
             guy.position.x, 
             guy.position.y, 
             2, 
             20); 


     CGRect targetRect = CGRectMake(
             speedUp.position.x - (speedUp.contentSize.width/2), 
             speedUp.position.y - (speedUp.contentSize.height/2), 
             speedUp.contentSize.width, 
             speedUp.contentSize.height); 
     if (CGRectIntersectsRect(projectileRect, targetRect)) { 
      [[SimpleAudioEngine sharedEngine] playEffect:@"Robot_blip-Marianne_Gagnon-120342607.wav"]; 
      [bg removeChild:speedUp cleanup:YES]; 

    } 
} 

このコードは衝突を検出し、それが音を再生し、スプライトではなく、CGRectを削除します。 CGRectはスプライトが削除されたときの位置にとどまります。これをどうすれば解決できますか?

おかげで、

テートまた

は、私は本当に衝突検出のためにBOX2Dやシマリスを使用したくありません。

+0

CGRectがその位置に残っているとはどういう意味ですか? – arul

+0

@arulだから、基本的に、私のアプリはあなたに落ちるスプライトを持っています。彼らがあなたと衝突すると、サウンドが再生され、私が言ったように、スプライトは削除されます。問題は、スプライトが削除された場所に移動すると、スプライトが削除されなかったかのように、衝突を検出してサウンドを何度も繰り返し再生することです。そのため、CGRect削除されました。希望は意味をなさない。 – tallen11

答えて

1

問題の説明は、スプライトが決してメモリから削除されなかったことを示しています。 alloc/initで作成した場合は、おそらく解放するのを忘れてしまいます。 autoreleaseイニシャライザから作成した場合、おそらくそれを保持しています。

また、[self boundingBox]メソッドを使用してスプライトの境界ボックスを取得します。より高速で柔軟性があります。

+0

ありがとう、私はそれを試してみましょう。 – tallen11

+0

私のスプライトは次のように作成されました:CCSprite * sprite = [CCSprite spriteWithFile:@ "file.png"];それから私は子供のようにそれを加えました。どのように私はそれを取り除くのですか? – tallen11