我正在制作一个简单的 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(使用前将#替换为@)