You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中使用WSAD键移动PictureBox释放按键后延迟如何解决

问题原因

你现有代码的KeyUp逻辑存在缺陷:只要松开任意一个WASD方向键,就会直接清空移动方向、停止hero的移动定时器。即便此时还有另一个方向键处于长按状态,也需要等待系统内置的按键重复触发机制再次触发KeyDown事件才能重启移动,系统默认的首次按键重复延迟就是你感受到的移动卡顿来源。

修复方案

核心思路是新增一个有序集合记录所有当前处于按下状态的方向键,按键按下时将对应按键加入集合,松开时从集合移除对应按键,每次按键状态变化后直接从集合取最早按下的按键更新移动方向,不需要等待KeyDown重新触发,即可消除延迟,同时保留你要求的「优先响应最先按下的按键」的逻辑。

修改后的代码

窗体类代码

// 新增字段:记录当前按下的方向键,顺序为按下的先后顺序
private readonly List<Keys> _pressedDirectionKeys = new List<Keys>();

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    Keys[] directionKeys = { Keys.W, Keys.A, Keys.S, Keys.D };
    // 只处理方向键,避免重复添加同一按键
    if (directionKeys.Contains(e.KeyCode) && !_pressedDirectionKeys.Contains(e.KeyCode))
    {
        _pressedDirectionKeys.Add(e.KeyCode);
        UpdateHeroDirection();
        hero.heroTimer.Start();
    }
    e.SuppressKeyPress = true;
}

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    Keys[] directionKeys = { Keys.W, Keys.A, Keys.S, Keys.D };
    if (directionKeys.Contains(e.KeyCode))
    {
        _pressedDirectionKeys.Remove(e.KeyCode);
        UpdateHeroDirection();
    }
    e.SuppressKeyPress = true;
}

// 新增辅助方法:更新hero的移动方向
private void UpdateHeroDirection()
{
    if (_pressedDirectionKeys.Count == 0)
    {
        // 没有按下的方向键,停止移动
        hero.SetDirection("");
        hero.heroTimer.Stop();
        return;
    }
    // 取最早按下的方向键设置移动方向,符合原有需求
    Keys currentKey = _pressedDirectionKeys[0];
    switch (currentKey)
    {
        case Keys.W:
            hero.SetDirection("up");
            break;
        case Keys.S:
            hero.SetDirection("down");
            break;
        case Keys.A:
            hero.SetDirection("left");
            break;
        case Keys.D:
            hero.SetDirection("right");
            break;
    }
}

Hero类代码

原有Hero类的逻辑不需要做任何修改,可以直接复用。

内容的提问来源于stack exchange,提问作者Tomass Galvans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:06:08