0

このようなテーブル パック スライダー ゲームを作成するために、小さなエンジンを作成しようとしています

次に、パックをうまく動かすのに問題があります。これは、速度法線を使用して加速を速度ベクトルの反対にするためです。

        velocity = ((Vector2) (initMousePosition - Input.mousePosition)).normalized*1.42f*Mathf.Min(1f,((Vector2) (initMousePosition - Input.mousePosition)).magnitude/Screen.height);
        acceleration = - velocity.normalized;
 ...

これは私の問題を解決するための便利な変数です:

Board.COEFFICIENTE_OF_FRICTION = 0.1f;

パブリック Vector2 の位置。

パブリック Vector2 速度;

パブリック Vector2 アクセラレーション。

コード:

private static void Move()
{
    foreach(BoardObject obj in objects)
    {
        if (obj is Puck)
        {
            auxPuck = (Puck) obj;
            if (auxPuck.velocity.magnitude > 0f)
            {
                auxPuck.acceleration += (-auxPuck.acceleration * 9.8f*auxPuck.mass*Board.COEFFICIENTE_OF_FRICTION*Time.deltaTime);
                auxPuck.velocity +=  auxPuck.acceleration * Time.deltaTime;
                auxPuck.position += auxPuck.velocity * Time.deltaTime;

                if (VectorsChangeMagnitudeSign(auxPuck.velocity,auxPuck.velocity-auxPuck.acceleration*Time.deltaTime))
                {
                    auxPuck.acceleration = Vector2.zero;
                    auxPuck.velocity = Vector2.zero;
                }
            }
        }
    }
}

たぶん、 float のような加速度を使用するか、速度の正規化されていない別のベクトルから始める必要があります。私の問題は、速度が大きくなったときに発生します。最後に絶えず移動する奇妙な残りの速度があるようです。

これをスムーズに実行するための良い方法をどのように行う必要があるかについての考えはありますか?

4

1 に答える 1

0

申し訳ありませんが、問題が見つかりました。先ほども言いました 。正規化されたベクトルを使用し始めました。パックを投げると、パックが壁に対して方向を変えるという問題が発生し、アクセルレストが摩擦力を減少させ、速度が一定になりました。

お時間をいただき申し訳ありませんが、とにかくありがとうございます。

于 2012-05-13T13:42:26.813 に答える