我正在进行XNA游戏,我遇到了一个问题.每当我按下游戏中的某个键时,按键触发的方法会被多次调用.例如,当用户按下攻击按钮(空间)时,角色在一次按键内攻击10次.我希望按键只触发一次方法.即使用户按下某个键,我也希望只调用一次方法.现在我已经通过在每次按下按钮后写一个thread.sleep来解决它,但这看起来非常不合适.我希望我的问题是可以理解的.提前致谢!
您需要将按钮标记为按下keydown,然后在keyup上标记为未按下.在keydown方法期间..检查按钮是否已经关闭..如果是..在keyup将其设置回来之前不做任何事情.
这样做的原因是,在按键期间,您的应用程序/游戏/通过其消息队列每秒接收数千条消息.即使你超快速地敲击空格键,也很可能通过消息队列处理了大约50条WM_KEYDOWN消息.
例:
bool SpacebarPressed = false;
private void KeyDown() {
if (!SpacebarPressed) {
SpacebarPressed = true;
DoSomethingWithSpacebarBeingPressed();
}
}
private void KeyUp() {
if (SpacebarPressed) SpacebarPressed = false;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
920 次 |
| 最近记录: |