3

アルカノイドのようなゲームを作ろうとしていますが、衝突の問題に直面しています。いつものように、レンガは長方形(私の場合は正方形)であり、ボールは円であるため、軸に沿った境界ボックスがすべてです。

これまでのところ、簡単な衝突検出アルゴリズムがありますが、ボールが各ブリックのどちら側に当たるかを知る必要があります。例えば: 衝突事件

これまでのところ、それぞれの側がヒットしたかどうかをチェックするアルゴリズムがあります。

up = left = right = down = 0;

if(mouse.left < brick.left && brick.left < mouse.right && mouse.right < brick.right){   
    left = 1;
}

if(brick.left < mouse.left && mouse.left < brick.right && brick.right < mouse.right){
    right = 1;
}

if(mouse.top < brick.top && brick.top < mouse.bottom && mouse.bottom < brick.bottom){
    up = 1;
}

if(brick .top < mouse.top && mouse.top < brick.bottom && brick.bottom < mouse.bottom){
    down = 1;
}

しかし、画像の3番目のように、コーナーに近い衝突では、2つのフラグ(たとえば、左と下)が1に設定されているため、決定方法がわかりません。

これらの場合、通常は何が行われますか?

4

1 に答える 1

2

単に 1 に設定するのではなく、貫通深度に設定します。

// why is it named mouse?
if(mouse.left < brick.left && brick.left < mouse.right &&
    mouse.right < brick.right)
{
    left = mouse.right - brick.left;
}

// and so on...

それが終わったら、あなたのメインサイドとして最低限のものを選ぶことができます.


ところで、その 3 番目の条件は必要ないと思います。次のようなケースを想像してください。

   +-+
   |B|
+--| |--+
|M | | | | |
| | | | | | | |
+--| |--+
   +-+

ここでは、左右の衝突はありません。

(残りの条件文の正確性を確認することもできます。)

于 2011-02-05T00:43:58.803 に答える