私はスペースインベーダーのようなゲームをコーディングしています.マウスとキーボードの両方でプレイヤーが制御する船を動かしたいと思っています. キーボードで船を動かすときに使用されている速度定数があります。マウスで船を動かすと、船の位置だけが変わります。キーボードで船を動かすと、船の位置と一致するようにマウスの位置も変更されます。
私が言及した定数は int 値ではなく、float 値です。この背後にある理由は、船の速度を上げるためにパワーアップを追加したいということであり、それは int 型である場合とそうでない場合があります。また、プレイヤーやゲームが難しいという要求があれば、速度を微調整できるようにしたいと考えています。問題は、MouseState が 1 組の int 座標を提供することですが、船の位置は 1 組の float 座標です。ここに問題があります:
各フレームで、船をマウスの位置に移動する必要があり (マウス制御)、各フレームでマウスの位置を船に移動する必要があります (キーボード制御)。マウスは int 座標を与えてくれるので、船の位置から float のものを int に変換しなければなりません。XNA またはその他の API (DirectX または WINAPI) の回避策として、マウスに float 座標を強制的に使用させる方法はありますか? また、仮想座標と画面座標のアイデアをいじり、それらの間で変換しています。
乾杯、アレックス
編集:コードスニペットを追加:
if (_keybState.IsKeyDown(Keys.Right))
{
Mouse.SetPosition(
(int)(_player1.GetPlayerPosition().X + Constants.HorizontalMovementSpeed),
(int)(_player1.GetPlayerPosition().Y));
}
if (_keybState.IsKeyDown(Keys.Left))
{
Mouse.SetPosition(
(int)(_player1.GetPlayerPosition().X - Constants.HorizontalMovementSpeed),
(int)(_player1.GetPlayerPosition().Y));
}
if (_keybState.IsKeyDown(Keys.Up))
{
Mouse.SetPosition(
(int)(_player1.GetPlayerPosition().X ),
(int)(_player1.GetPlayerPosition().Y - Constants.VerticalMovementSpeed));
}
if (_keybState.IsKeyDown(Keys.Down))
{
Mouse.SetPosition(
(int)(_player1.GetPlayerPosition().X),
(int)(_player1.GetPlayerPosition().Y + Constants.VerticalMovementSpeed));
}
if (_keybState.IsKeyDown(Keys.Space) && _shootKeyPressed == false)
{
_player1.Shoot();
_shootKeyPressed = true;
}
_shoboState = Mouse.GetState();
_player1.MovePlayerShipToPosition(new Vector2(_shoboState.X, _shoboState.Y));