1

プレイヤーが戦車を操作するシンプルなゲームを作っています。砲塔の回転は、マウスの動きによって制御されます。コードは現在次のようになっています。

if (Game.MouseState.Y < yMovementBorder)
   PossessedTurretPitchValue += dist;

if (Game.MouseState.Y > yMovementBorder)
   PossessedTurretPitchValue -= dist;

if (Game.MouseState.X < xMovementBorder)
   PossessedTurretYaw += rotationDist / 6;

if (Game.MouseState.X > xMovementBorder)
   PossessedTurretYaw -= rotationDist / 6;

xMovementBorder と yMovementBorder は、ゲーム画面の中点を表す値です。問題は、マウスを動かすと、タレットが最大のピッチ/ヨー角度まで回転することです。マウスの動きとその大きさを読み取ることができるようにするにはどうすればよいですか (つまり、マウスのわずかな動きはタレットのわずかなピッチ/ヨーの動きのみを引き起こします)。

4

2 に答える 2

0

あなたがやりたいことは、マウスが中心からどれだけ離れているかに基づいて制限を設定することだと思います。

お気に入り:

if (Game.MouseState.Y < yMovementBorder)
    if (PossessedTurretPitchValue < yMovementBorder*someFactor)
        PossessedTurretPitchValue += dist;

他の 3 つのケースについても同様です。

制限を設定しない、中心からのずれによってタレットが移動します。それは常に動いており、最終的にはどこかにレールを敷きます。私が正しく理解していれば、これがあなたのコードの現在の動作です。

于 2013-08-15T19:14:17.137 に答える
0

update メソッドでは、以前のマウスの状態と現在のマウスの状態への参照を保存する必要があります。次に、これら 2 つの変数を使用して、最後の更新以降にマウスが移動した量を把握します。適切に調整するには多少の調整が必要ですが、次のようにしてみてください。

//define your private variables
private MouseState prevMouseState = null;
private MouseState currMouseState = Game.MouseState;

public void Update(GameTime gt)
{
    prevMouseState = currMouseState;
    currMouseState = Game.MouseState;

    //calculate how much the mouse has moved since the last update
    var dX = currMouseState.X - prevMouseState.X;
    var dY = currMouseState.Y - prevMouseState.Y;

    //do your rotating depending on the values of dX and dY
}
于 2013-08-15T19:13:05.433 に答える