-2

今のところ、X と Y を比較して衝突を確認できますが、それは 2 つのオブジェクトがまったく同じ X と Y の位置で互いに通り過ぎる場合のみです。もう少し正確に衝突をチェックし、スキムをチェックし、より適切な用語がないかどうかをチェックする必要があります。X、Y、X、Y スケールの変数と、X と Y の速度があります。どんな助けも大歓迎です:D

編集:四角!!!

4

3 に答える 3

0

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;
}
于 2014-05-30T01:28:03.153 に答える