-1

スプライトと別のスプライトの衝突を検出したい。しかし、スプライトが他のスプライトの左部分に触れているか、スプライトの右部分に触れているかを確認したい。衝突を検出するために以下のコードを使用しています。しかし、これは全体的な衝突(スプライトが他のスプライトの任意のポイントに触れた)を検出します。ただし、スプライトが他のスプライトの前面に触れた場合は衝突としてカウントしたい。

if (CGRectIntersectsRect(sprite1.boundingBox, sprite2.boundingBox)) {
            NSLog(@"sprite1 to delete");
 }

誰でもこれを行う方法を知っていますか?

4

2 に答える 2

5

衝突時のスプライトの位置を比較できますか?

sprite1.anchorpoint、sprite2.anchorpoint = ccp(0,0) とします。衝突検出時:

// left part of sprite 1 touched right part of sprite 2
if (sprite1.position.x == sprite2.position.x + sprite2.contentSize.width.x) {

}
// right part of sprite 1 touched left part of sprite 2
else if (sprite1.position.x + sprite1.contentSize.width.x == sprite2.position.x) {

}
于 2013-04-08T08:43:50.307 に答える
3

cocos2d のデフォルトでは、CCSprite のアンカーポイントは ccp(0.5, 0.5) であり、スプライト位置の比較を変更します。ゲームループ内のスプライト間の相対距離を確認する目的で位置を比較すると、等値演算子は最適な選択ではないと思います。さまざまな位置状況、スプライトの移動ステップを準備するには、より大きい/より小さい方が適しています。

よりよく理解するために、たとえばスプライトの状況を含めました。

ここに画像の説明を入力

相対位置をチェックする (スプライトが他のスプライトのどちら側にあるかを検出する) には、衝突検出チェックでプログラムするさまざまな選択肢があります。

1)

if (CGRectIntersectsRect(sprite1.boundingBox, sprite2.boundingBox)) {
    CGPoint diff = ccpSub(sprite1.position, sprite2.position)
    if (diff.x<=0) {
       // sprite1 is on the left side
    } else {
       // sprite1 is on the right side
    }
}

2)

if (CGRectIntersectsRect(sprite1.boundingBox, sprite2.boundingBox)) {
    if (sprite1.position.x <= sprite2.position.x) {
       // sprite1 is on the left side
    } else {
       // sprite1 is on the right side
    }
}
于 2013-04-08T09:21:02.007 に答える