响应多个KeyDown事件 [英] Respond to multiple KeyDown events

查看:115
本文介绍了响应多个KeyDown事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm making a simple WinForm car race game. I've got two objects - cars, and they move on the form when key is pressed (Form1KeyDown_Event).

唯一的事情是,当一个玩家按下一个键时,另一位玩家无法按下他的键(什么也没有发生).但是,当第一个玩家释放按键时,第二个玩家可以按下一个按键并正常控制自己的汽车.

The only thing is, that when one player press a key, the other player cannot press his key (nothing happens). But when the first player releases the key, second player can press one his keys and normally control his car.

如何同时收听两个播放器按键?我应该使用线程并将每辆汽车都放在自己的线程上吗?

How can I listen for two player keys simultaneously? Should I use threads and have each car on its own thread?

推荐答案

下面是一个简单的示例,说明了您可以通过使用keyup和keydown事件来同时收听多个键的方法.

Here's a simple example of what you can do in order to listen to several keys at the same time, using the keyup and keydown events instead.

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" : "-";
        }
    }
}

这篇关于响应多个KeyDown事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆