0

オブジェクトが衝突したかどうかを確認するために使用する座標が常に間違っているため、Cocos2D での衝突の検出に問題があります。

次のオブジェクトがあります。

  1. すべての障害物を含む、タイル マップのレイヤーからのすべてのスプライト。
  2. ハローワールドレイヤー(シーンを返すメインレイヤー)の子である別のスプライトの子であるスプライト。このスプライトはマップ内を連続的に移動し、障害物と衝突する場合があります。

衝突を検出するには、2 つのスプライトのバウンディング ボックス間の距離を確認するだけです。

inline BOOL collision(CGRect r1, CGRect r2)
{
    CGPoint c1= RectCenter(r1);
    CGPoint c2= RectCenter(r2);
    BOOL result= (fabs(c1.x-c2.x)<MAX(r1.size.width/2.0,r2.size.width/2.0)) && (fabs(c1.y-c2.y)<MAX(r1.size.height/2.0,r2.size.height/2.0));
    return result;
}

すべてのスプライトの座標とサイズを取得するには、boundingBox プロパティを使用します。しかし、座標が間違っていて、衝突が正しく検出されません。

私は何か間違ったことをしていると確信しています。誰かが同じ座標系を持つようにすべてのスプライトを管理する方法を教えてもらえますか? convertToWordSpace も試しましたが、うまくいきませんでした。

4

1 に答える 1

2

2 つの CGRect が交差するかどうかを確認するための組み込み関数を使用して、衝突メソッドを廃止できます。

CGRectIntersectsRect(r1, r2);
于 2013-02-27T01:41:54.237 に答える