响应多个KeyDown事件

2023-12-01

我正在制作一个简单的 WinForm 赛车游戏。我有两个对象 - 汽车,当按下按键时它们在表单上移动(Form1KeyDown_Event)。

唯一的问题是,当一个玩家按下一个键时,另一个玩家无法按下他的键(什么也不会发生)。但是当第一个玩家释放钥匙时,第二个玩家可以按下他的钥匙并正常控制他的车。

如何同时监听两个播放器按键?我应该使用线程并让每辆车都有自己的线程吗?


下面是一个简单的示例,说明您可以使用 keyup 和 keydown 事件同时监听多个按键。

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WinFormTest {
    public partial class Form1 : Form {
        private readonly IDictionary<Keys, bool> downState;

        public Form1() {
            InitializeComponent();
            downState = new Dictionary<Keys, bool>();
            downState.Add(Keys.W, false);
            downState.Add(Keys.D, false);

            KeyDown += remember;
            KeyUp += forget;
        }

        protected override void OnLoad(EventArgs e) {
            base.OnLoad(e);
            Timer timer = new Timer() { Interval = 100 };
            timer.Tick += updateGUI;
            timer.Start();
        }

        private void remember(object sender, KeyEventArgs e) {
            downState[e.KeyCode] = true;
        }

        private void forget(object sender, KeyEventArgs e) {
            downState[e.KeyCode] = false;
        }

        private void updateGUI(object sender, EventArgs e) {
            label1.Text = downState[Keys.W] ? "Forward" : "-";
            label2.Text = downState[Keys.D] ? "Right" : "-";
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

响应多个KeyDown事件 的相关文章

随机推荐

  • 在辅助监视器上运行单独的应用程序

    Android 支持将应用程序渲染到辅助屏幕 4 2 中添加 但是否可以在主显示器上运行一个应用程序 在辅助显示器上运行另一个应用程序 Android SDK 附带一个Presentation允许前台活动在外部显示器上显示替代内容的类 这是
  • 远程:致命:内存不足,使用 post-receive 挂钩在 git Push 上重新分配失败

    当我做git push remotename branchname到我与 1and1 共 享主机上的远程时 我收到以下错误消息 Counting objects 7 done Delta compression using up to 8
  • 当混合中有新行字符时,UITextView firstRectForRange 不起作用

    我使用此方法将 NSRange 转换为 CGRect 因为它与 UITextView 相关 CGRect frameOfTextRange NSRange range inTextView UITextView textView UITex
  • Spring Data Neo4J 存储库 findAll() 导致 nullpointerException

    我制作了一个简单的存储库 其中包含系统中的所有人员 一切似乎都工作正常 我可以根据给定的键和值添加 删除甚至检索单个人员 但由于某种原因我无法直接检索存储在存储库中的所有人员 我尝试使用 findAll 方法来完成此操作 该方法应该返回一个
  • IIS不使用用户环境变量

    我将 NET Core 应用程序部署到同一服务器两次 一次用于 QA 一次用于生产 目前 我让他们每个人都使用不同的本地用户来运行 IIS 应用程序池 并相应地将 ASPNETCORE ENVIRONMENT 变量设置为 qa 和 生产 这
  • java.lang.OutOfMemoryError:调用 Files.readAllBytes 时直接缓冲内存

    我有以下代码 旨在读取目录并将其压缩到 tar gz 存档中 当我将代码部署到服务器上并使用一批文件对其进行测试时 它在前几个测试批次中工作 但在第 4 或第 5 批次之后 它开始持续给出 java lang OutOfMemoryErro
  • 从数组中删除负数

    我有一个来自数据库的数组 它从一组元素中获取所有 id 然而 它似乎也从发生的一些后端事件中获取了一些负 ID 并且它破坏了我需要对这些 id 执行的操作 在循环数组并将其放入应用程序之前 有没有办法从数组中删除这些负 ID 在我抓住它们之
  • 使用 AVFoundation 框架 iPhone 进行视频录制?

    我正在借助示例代码开发一个应用程序2010 年全球开发者大会AVCamDemo 示例 在应用程序中 我需要从 iPhone 的前置摄像头录制视频 但由于我的地方没有新的 iPhone 4 我无法正确测试代码 如果有人能给我提示 无论我是否朝
  • 我在 pyqt5 程序中使用 QDoubleValidator 但它似乎不起作用

    我创建了一个 QWidget 对象 其中有一些 lineEdit 并且我打算向它们添加一些约束 因此我实现了 QDoubleValidator 对象 以下是我的代码中的相关部分 self lineEdit taxRate QLineEdit
  • Python 和 Selenium - 离开页面时禁用警报

    Using Python 3 and Chrome驱动程序 假设一个自动化的 Python 程序正在网上冲浪 从不同的来源获取内容 假设这些网站中的任何一个触发了 您确定要离开此页面吗 alert 关键词 any 以随机方式 这些网站 Qu
  • 结构化数据(微观数据)和嵌入项目

    我想使用 Microdata 和 Schema org 来定义我的网页的主要内容 所以我做了这样的事情 div div div div
  • 将字符串从 C# 编组到 C++

    我是微软世界的新人 我在尝试将简单的字符串从 c 传递到 dll c 时遇到很多问题 我读过很多帖子和文档 但问题是一样的 C code extern C declspec dllexport int Init long l char ur
  • 宏中的 # 和 ##

    include
  • 如何更改 UITableView Swift 3 中的分隔符高度?

    尽管关于这个主题已经有一些答案 它们都没有涵盖 Swift 3 而且它们都是很久以前的了 当前在 Swift 3 中更改 UITableView 中分隔符高度的最佳方法是什么 更新为 Swift 3 如果您想更改 UITableView 分
  • 如何在链接悬停时隐藏浏览器左下角的 url

    当我将光标悬停在链接上时 我想隐藏显示的网址 我只想在我的浏览器上这样做 网上有很多关于此的问题 但我没有找到任何可行的解决方案 我正在寻找适用于 Chrome 或 Firefox 的解决方案 为什么我需要这样做 我很快就会展示一个网站演示
  • jQuery 如果在页面上找到此图像,请添加此元标记?

    我正在尝试将丰富的片段添加到显示星星的动态图像中 我的购物车写的唯一内容就是这个图像 所以我必须找到正在显示的图像 然后添加正确的元标记 因此 如果显示的图像是 1stars gif 我必须写 如果显示的图像是 5stars gif 我必须
  • 如何按列删除所有具有“NA”值的单元格

    这个问题不是重复的 因为我的data frame 没有相同数量的NA values在所有列中 因此该问题中提到的解决方案不起作用 我有一个data frame与很多NA值 我想删除所有具有 NA 值的单元格 重要 不是行或列 单元格 原来的
  • 如何将 URI 传递给意图?

    我正在尝试将 URI 对象传递给我的 Intent 以便使用该 URI 在另一项活动中 如何传递 URI private Uri imageUri Intent intent new Intent this GoogleActivity c
  • GPS计算Windows Phone 7上两点之间的距离

    我正在使用 GPS 来计算两点之间的距离 即我使用 Windows Phone 作为卷尺 但当我开始时 我实际上没有得到正确的值 即使我站着不动 它也给了我数百米 这是我的代码 myWatcher StatusChanged new Eve
  • 响应多个KeyDown事件

    我正在制作一个简单的 WinForm 赛车游戏 我有两个对象 汽车 当按下按键时它们在表单上移动 Form1KeyDown Event 唯一的问题是 当一个玩家按下一个键时 另一个玩家无法按下他的键 什么也不会发生 但是当第一个玩家释放钥匙