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 和标志捕获表单中的键盘事件:

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:
            ...
    }
}

然后您可以在计时器中使用此信息:

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 回答