1

コード:

    private void sprites_updater_Tick(object sender, EventArgs e)
    {
        s++;
        int x = player.Location.X;
        int y = player.Location.Y;
        if (s == 1)
      if (ModifierKeys.HasFlag(Keys.A))
            {
                player.Location = new Point(x - 5, y);
            }
            s = 0;
            sprites_updater.Start();

        }

そのため、タイマー コードを使用しているときに、上記 (ModifierKeys.HasFlag(Keys.A)) と同じことを書きましたが、機能しませんでした。どうして?!ところで、XNA、WPF、またはその他のもの (.NET のみ) を使用せずに、WinForms パネル内に 3D カメラの視点を表示する方法はありますか?!

4

1 に答える 1

1

キーボード ストロークを取得して後で処理する最善の方法は、KeyDown、KeyUp、およびフラグの両方を使用して、フォームで Keyboards イベントをキャッチすることです。

bool isAPressed;
...

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    switch(e.KeyCode)
    {
        case Key.A:
            isAPressed = true;
            break;
        case Key.XXXX:
            ...
    }
}

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    switch(e.KeyCode)
    {
        case Key.A:
            isAPressed = false;
            break;
        case Key.XXXX:
            ...
    }
}

次に、この情報を timer で使用できます。

private void sprites_updater_Tick(object sender, EventArgs e)
{
    s++;
    int x = player.Location.X;
    int y = player.Location.Y;
    if (s == 1)
    if (isAPressed)
        {
            player.Location = new Point(x - 5, y);
        }
        s = 0;
        sprites_updater.Start();
    }

これは、プレイヤーの動きをこのように処理するのに特に興味深いものです (矢印)。

于 2013-02-23T22:23:56.423 に答える