1

カービィがバスケットボールをネットに撃ち込むゲームがあります。私が抱えている問題は、ショットが得点したかどうかを検出することです。物理デバッグをオンにしてシーンをセットアップしたので、すべての物理ボディが赤くなりました。ネットの真ん中にある赤い円は、ショットが得点したかどうかを検出するために使用するボディです。ショットがサークルに入った場合、それは得点です。問題は、ショットが円を通過しても衝突を検出する方法がないことです。 シーン

私はこれを試しました。これは、ボールが円に当たるとすぐにセンサーになり、円を離れるとすぐに非センサーになり、ボールを通過させますが、その後は地面に当たります。問題は、最初の衝突がまだ有効であるため、ボールが少し跳ね上がり、通常は円に 2 ~ 3 回当たることです。

- (void)ccPhysicsCollisionPostSolve:(CCPhysicsCollisionPair *)pair goal:(CCNode *)goal wildcard:(CCNode *)ball
{
    ball.physicsBody.sensor = YES;
}

- (void)ccPhysicsCollisionSeparate:(CCPhysicsCollisionPair *)pair goal:(CCNode *)goal wildcard:(CCNode *)ball
{
    ball.physicsBody.sensor = NO;
}
4

1 に答える 1

1

他の 2 つの衝突デリゲート メソッドを使用すると、非常に簡単です。それぞれで、衝突が発生するかどうかを判断できます。発生しない場合は NO を返して、Chipmunk に衝突を無視するように指示し、ボディが互いに通過できるようにします。

- (BOOL)ccPhysicsCollisionPreSolve:(CCPhysicsCollisionPair *)pair 
                              goal:(CCNode *)goal
                              ball:(CCNode *)ball
{
    return NO;
}

- (BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair
                           goal:(CCNode *)goal
                           ball:(CCNode *)ball
{
    return NO;
}
于 2014-06-06T07:59:41.857 に答える