今のところ、X と Y を比較して衝突を確認できますが、それは 2 つのオブジェクトがまったく同じ X と Y の位置で互いに通り過ぎる場合のみです。もう少し正確に衝突をチェックし、スキムをチェックし、より適切な用語がないかどうかをチェックする必要があります。X、Y、X、Y スケールの変数と、X と Y の速度があります。どんな助けも大歓迎です:D
編集:四角!!!
今のところ、X と Y を比較して衝突を確認できますが、それは 2 つのオブジェクトがまったく同じ X と Y の位置で互いに通り過ぎる場合のみです。もう少し正確に衝突をチェックし、スキムをチェックし、より適切な用語がないかどうかをチェックする必要があります。X、Y、X、Y スケールの変数と、X と Y の速度があります。どんな助けも大歓迎です:D
編集:四角!!!
Elist は大きな助けになりました。しかし、これにより最初の正方形の周りに大きな正方形が作成され、衝突が台無しになることがわかりました。これは、Elist の投稿に基づいた私の実装です。
public boolean colliding(Square os)
{
// the lesser value is the distance of the square's width and that of the lenght of the
// other square
return Math.abs(center.x - os.center.x) < width / 2 + os.width / 2
&& Math.abs(center.y - os.center.y) < height / 2 + os.width / 2;
}
Elist に敬意を表しますが、彼らの投稿がなければ、私はこの結論に達しなかったでしょう。
興味のある人のための追加のヘルプは、入ってくる正方形を止めることができるハンドラーと、他の正方形の速度に基づいてそれを反映するハンドラーです。
// stops the square from intersecting
public void push_collided_basic(Square os, float refelct_amnt)
{
if(os.center.x < center.x)
os.center.x -= refelct_amnt;
else if(os.center.x > center.x)
os.center.x += refelct_amnt;
if(os.center.y < center.y)
os.center.y -= refelct_amnt;
else if(os.center.y > center.y)
os.center.y += refelct_amnt;
}
// and now one that reflects the ball -> untested!!!
public void push_collided_velocity(Square os)
{
// flip the velocitys directions for x
if(os.center.x < center.x
|| os.center.x > center.x)
os.vel_x *= -1;
// flip the velocity direction for y
if(os.center.y < center.y
|| os.center.y > center.y)
os.vel_y *= -1;
// update the coordiantes
os.center.x += vel_x;
os.center.y += vel_y;
}