首页 文章

多次按键在C#中执行不同的事件

提问于
浏览
3

private void Form1_KeyDown(object sender,KeyEventArgs e){if(e.KeyCode == Keys.W)player1.moveUp(); if(e.KeyCode == Keys.NumPad8)player2.moveUp(); }

在上面的代码中,moveUp方法基本上只是递增一个值 . 我想要它,因此可以同时按下(或按住)两个键,并且两个事件都将触发 . 谢谢,Nevik

2 回答

  • 2

    获取键盘的状态并检查所需键的状态 .

    事件不是游戏的最佳方式 . 你需要更快的响应 .

    [DllImport("user32.dll")]
    public static extern int GetKeyboardState(byte [] lpKeyState);
    ...
    byte[] bCharData = new byte[256];
    GetKeyboardState(bCharData);
    

    另一种方式,取自here

    [DllImport("user32.dll")]
    static extern short GetKeyState(VirtualKeyStates nVirtKey);
    ...
    public static bool IsKeyPressed(VirtualKeyStates testKey)
    {
        bool keyPressed = false;
        short result= GetKeyState(testKey);
    
        switch (result)
        {
            case 0:
                // Not pressed and not toggled on.
                keyPressed = false;
                break;
    
            case 1:
                // Not pressed, but toggled on
                keyPressed = false;
                break;
    
            default:
                // Pressed (and may be toggled on)
                keyPressed = true;
                break;
        }
    
        return keyPressed;
    }
    

    More links.

    基本上,这些已经在网上提供 . 在询问前尝试搜索 . 它会更快:)

  • 4

    假设您有一个“游戏循环”,用键盘更新您正在移动的对象 . KeyDown事件应将对象状态更改为“向上移动” . 然后你的循环每次运行时都会给它新的位置 .

    KeyUp事件应该将状态更改回“空闲” . Iff状态仍在“向上移动” .

    您现在不再依赖按键重复来保持对象移动 . 并且玩家可以同时按下多个键 .

相关问题