3

プラットフォームゲームを作ろうとしています。私は(ほぼ)衝突コードを持っていますが、バグがあるようです。私はこのコードを試します:

 for (int i = 0; i < world.ground.size(); i++) {
        if (!world.ground.get(i).intersects((int) x, (int) y, player_width, player_height + (int) dy)) {
            y += dy;
            if (dy < 4) {
                dy += 0.1;
            }
        } else {
            dy = 0;
            jumped = false;
        }
    }

しかし、時々私のキャラクターの足は2または3ピクセルで地面を通り抜けます。これを行うためのより良い方法はありますか?助けてください、ありがとう。

4

1 に答える 1

3

posteriori (discrete)衝突検出を使用しているようです。これにより、オブジェクトは、触れられたとき、または貫通されたときにのみアクティブになるため、毎回少しずつ貫通します。priori (continuous)これを衝突検出に変換することを考えるかもしれません。このように、衝突前にチェックし、侵入を回避するために速度または位置を調整するため、地面に侵入することはありません。

このようなものをいじりたくない場合は、correctionペイントする前に機能する関数を追加するだけです。

void foo()
{
      //check if below ground
      //if yes, displecement upwards until it is above enough
      //now you can paint
      //return
}

私はあなたがこれを実装したのを見ます:

  what_you_need_to_make_it_above_ground=(ground_y-feet_y);


  //im not sure if dy is ground level so i added second boolean compare

  if ((dy < 4)||(ground_y>feet_y)) {
                 dy += 0.1; // this isnt enough. should be equal to:
                 dy +=what_you_need_to_make_it_above_ground;
                 dy +=if_there_are_other_parameters_think_of_them_too;

              }
于 2012-09-02T14:06:32.080 に答える