按按键创建事件
本文关键字:事件 创建 | 更新日期: 2023-09-27 17:49:39
我想在键盘上的每次按键发生时创建一个事件。到目前为止,我是这样做的:
namespace WindowsFormsApplication1
{
public partial class SpaceInvadors : Form
{
SpaceInvadors sInvaders;
public SpaceInvadors()
{
InitializeComponent();
KeyStroke keyStroke = new KeyStroke();
sInvaders=new SpaceInvadors(keyStroke);
}
public SpaceInvadors(KeyStroke keyStroke)
{
keyStroke.keyStroked += Form1_KeyDown;//How does that chaining to the event work?
keyStroke.keyStroked += Form1_KeyUp;
}
private void Form1_KeyDown(object sender, KeyArgs e)
{
if (e.KeyCode == Keys.Q)
{
Application.Exit();
}
}
}
public class KeyStroke
{
public event EventHandler<KeyArgs> keyStroked;
public void Add(Keys key)
{
// I need to know how to obtain this key:
KeyArgs keyAr = new KeyArgs(key);
keyRisen(keyAr);
}
public void keyRisen(KeyArgs kA)
{
if (keyStroked != null)
keyStroked(this, kA);
}
}
public class KeyArgs : EventArgs
{
public Keys KeyCode { get; set; }
public KeyArgs(Keys key)
{
KeyCode = key;
}
}
还有,我怎么能一直听到什么键被按下,而不仅仅是一次
对于你的问题
"还有,我怎么能一直听呢按了什么键,而不是只有一次"
我看到你已经用过Form了。按下'q'键关闭游戏:
private void Form1_KeyDown(object sender, KeyArgs e)
{
if (e.KeyCode == Keys.Q)
{
Application.Exit();
}
}
你可以给你的方法添加更多的键:
private void Form1_KeyDown(object sender, KeyArgs e)
{
if (e.KeyCode == Keys.Q)
{
Application.Exit();
}
else if (e.KeyCode == Keys.Up)
spaceInvaders.MoveUp();
}
对于链接,我认为类KeyStoke管理播放界面。因为KeyDown事件用于确定按下了什么键。我建议你多学习活动和委托。
如果我理解正确的话,你正在编写一款名为《太空入侵者》的游戏!:)
我不认为这种方法对游戏有好处。最合适和最常用的方法是使用GetKeyboardState函数。为了在游戏中获得良好的效果,你应该创建计时器并定期检查关键状态。我建议你也在timer例程中执行渲染。
如果某些原因阻止您使用GetKeyboardState
,我将建议您使用PreviewKeyDown