OkanoShinri / graviton

なんかこう重力とかで飛び回る系のやつ
0 stars 0 forks source link

すり抜け #8

Closed OkanoShinri closed 3 years ago

OkanoShinri commented 3 years ago
OkanoShinri commented 3 years ago

自分以外のオブジェクトを移動させて相対的なスクロールを作るのには限界がある(気がする)

が意外とめんどい。カメラ動かす方が良いかも。

OkanoShinri commented 3 years ago

長方形との衝突判定

  1. 以下の変数(bool型)を用意する
    • delta_x_in_box
    • delta_y_in_box
    • delta_pos_in_box
  2. すべての対称オブジェクトに対して、以下の操作を行う
    if (isInBox(x, y, w, h, pos.x + velocity.x, pos.y) || isInBox(x, y, w, h, pos.x - velocity.x, pos.y))
    {
    delta_x_in_box = true;
    }
    else if (isInBox(x, y, w, h, pos.x, pos.y + velocity.y) || isInBox(x, y, w, h, pos.x, pos.y - velocity.y))
    {
    delta_y_in_box = true;
    }
    else if (isInBox(x, y, w, h, pos.x + velocity.x, pos.y + velocity.y))
    {
    delta_pos_in_box = true;
    }
  3. 移動量(velocity)を算出する
  4. 移動先のチェックを行う
    if (delta_x_in_box && delta_y_in_box) {
    velocity = -velocity;
    }
    else if (delta_x_in_box) {
    velocity.x = -velocity.x;
    }
    else if (delta_y_in_box) {
    velocity.y = -velocity.y;
    }
    else if (delta_pos_in_box) {
    velocity = -velocity;
    }
  5. 移動
    pos += velocity;
  6. 忘れずにリセット
    delta_x_in_box = false;
    delta_y_in_box = false;
    delta_pos_in_box = false;
OkanoShinri commented 3 years ago

これで四方からぶつかるときも角にぶつかるときも連続して並んでいる箱の境界にぶつかるときも大丈夫なはず…