0

私はSDL 2を初めて使用し、弾丸と宇宙船の間の衝突検出にしばらく悩まされてきました。

何が起こらなければならないかは理解していますが、何が何と衝突し、どのようにコードを配置するかについて混乱しています。衝突検出は機能せず、私が行った他のいくつかの試みでは、弾丸が画面の反対側にある場合でも、宇宙船の y 座標で消えてしまいました! 怠惰な foo チュートリアルに基づいています。

私のコード全体はここにあります: http://codepad.org/YaCavBvm

LazyFoo に基づく私の衝突検出:

//sides of sprite rectangles
int leftBullet, leftEnemy;
int rightBullet, rightEnemy;
int topBullet, topEnemy;
int bottomBullet, bottomEnemy;

//Calculate the sides of bullet
leftBullet = posBullet.x;
rightBullet = posBullet.x + BULLET_WIDTH;
topBullet = posBullet.y;
bottomBullet = posBullet.y + BULLET_HEIGHT;

//Calculate the sides of enemy
leftEnemy = posEnemy.x;
rightEnemy = posEnemy.x + SPRITE_WIDTH;
topEnemy = posEnemy.y;
bottomEnemy = posEnemy.y + SPRITE_HEIGHT;

for (int i=0; i<MAX_BULLETS; i++)
{
    if (topBullet == bottomEnemy)
    {
        arrayofBullets[i].isActive = false;
    }
}
4

1 に答える 1

1

理論的には、足の裏をかすめた弾丸はヒットですが、ヒットまたはミスと見なすことができます。以下を試してください

if (topBullet >= topEnemy &&
    bottomBullet <= bottomEnemy &&
    leftBullet >= leftEnemy &&
    rightBullet <= rightEnemy)
    // What happens when the bullet hits

これにより、部分ヒットが処理されます。lazyfoo のものは、例のコンテキストで正しい 1 つの特定のケース用です。

于 2014-03-22T16:47:06.167 に答える