2012-01-30 13 views
0

Box2dを使用せずに衝突検出を試みていますのでを使用していますので、CCRectIntersectsRect() を使用しています。 (ボールが英雄とするときに接触したときにボールがヒーローを横切る。)count--は一度だけ呼び出されるように、衝突検出が確実に1回の衝突でトリガーされるようにします

私が欲しいのは、何らかの方法でそれをスケジュールすることです。

完全なソースコードについては

how to use box2d for collision detection in cocos2d-x

CCRect bom= ball->boundingBox(); 
CCRect gon= hero->boundingBox(); 

if(CCRect::CCRectIntersectsRect(bom,gon)) 
{ 
    count--; 
} 

答えて

1

collidingと呼ばれる永続的なブール変数を作成し、このようにそれを使用します。

if(CCRect::CCRectIntersectsRect(bom,gon)) 
{ 
    if (!colliding) 
     count--; 
    colliding = true; 
} 
else 
    colliding = false; 

ここでは、以下のコメントで提供されているコードの修正です:

CCRect bom= roll->boundingBox(); 
CCRect gon= hero->boundingBox(); 
static bool colliding=false; 
if(CCRect::CCRectIntersectsRect(bom,gon)) 
{ 
    if (!colliding) 
    { 
     intersection(); 
     colliding = true; 
    } 
} 
else 
    colliding = false; 
+0

は、私はそれがコードに影響を与える文句を言わないと思いますが、私は試してみましょう。 –

+0

いいえ、それはうまくいかなかった:( –

+0

@ jeet.mg:あなたはおそらくそれを間違った場所に置いたのですが、あなたはその機能にローカルにしていませんでしたか?(これは修辞的な質問でした。あなたがしたことは確かです)関数呼び出しの間にその値が維持される場所にある必要があります –

0

1でカウントを初期化する IF(CCRect :: CCRectIntersectsRect角形(BOM)& &カウント> 0){ count--。 }

+0

カウントは英雄(最初に3に設定されています)の寿命であり、0まで減少し続けます –

+0

カウント== 0 英雄が死んでいる –