我正在开发XNA游戏,并且遇到了问题。每当我按下游戏中的按键时,按键触发的方法就会被多次调用。例如,当用户按下攻击按钮(空间)时,在一次按键内人物攻击就像10次。我想要按键只触发一次该方法。即使用户按下某个键,我也希望只调用一次方法。现在我已经通过在每次按下按钮之后编写一个thread.sleep来解决它,但是这看起来非常不够高效。我希望我的问题可以理解。提前致谢!多次按下按钮调用方法
1
A
回答
5
您需要将该按钮标记为在keydown上按下,然后在按键上标记为未按下。在keydown方法期间,检查按钮是否已经关闭..如果是..在keyup设置它之前不做任何事情。
原因是,在按键期间,您的应用程序/游戏/无论通过其消息队列每秒接收数千条消息。即使你将空格键快速超过,也有可能通过消息队列处理大约50条WM_KEYDOWN消息。
例子:
bool SpacebarPressed = false;
private void KeyDown() {
if (!SpacebarPressed) {
SpacebarPressed = true;
DoSomethingWithSpacebarBeingPressed();
}
}
private void KeyUp() {
if (SpacebarPressed) SpacebarPressed = false;
}
0
你需要你当第一次按下该键设置,然后松开按键时复位的标志。一个粗略的例子:
if(keyIsPressed() && !myFlag)
{
//do stuff
myFlag = true;
}
else if(!keyIsPressed())
myFlag = false;
2
我知道这已被回答,但你可以使用这样的方法。 具有当前一个落后oldKeyBoardState一个框架,做IsKeyToggled(Keys.Space)
bool IsKeyToggled(Keys key)
{
if (!oldKeyBoardState.IsKeyDown(key) && keyboardState.IsKeyDown(key))
return true;
else
return false;
}
用于设定一个落后,你将需要2个全局变量。
public static KeyboardState keyboardState;
public static KeyboardState oldKeyBoardState;
你Update()
方法应该是这样的:
protected override void Update(GameTime gameTime)
{
keyboardState = Keyboard.GetState();
//TODO: Add update logic here
//This comes last
oldKeyBoardState = keyboardState;
}
相关问题
- 1. 多次调用按钮
- 2. 只需按一下按钮即可调用多个方法?
- 3. ReactJs:防止多次按下按钮
- 4. 为什么我按下按钮后无法调用此方法?
- 5. 按下切换按钮调用多个按钮
- 6. 在java中每5秒最多按一次按钮一次按下按钮
- 7. 用户按下待机按钮时会调用哪些方法?
- 8. 如何在用户按下按钮时调用方法?
- 9. iOS - 当按下按钮时不会调用方法
- 10. 按下按钮(Java with Swing)时如何重复调用方法?
- 11. 当我按下按钮时,如何调用静态方法?
- 12. 从UIActionSheet按下按钮后需要帮助调用方法
- 13. 如何在按下按钮时调用此方法
- 14. 多次按下后退按钮无法返回活动
- 15. 在按钮上处理多次按下的最佳做法
- 16. 禁用按下两次的android按钮
- 17. 按下按钮后执行KeyDown方法
- 18. 按钮按下方法位置
- 19. 按钮无法按两次
- 20. 多次选择选项更新一次按下按钮
- 21. 当用户按Home按钮并再次按下它以返回时,调用哪些方法
- 22. 按钮命令仅在第二次按下时才会调用
- 23. 按下多个Tkinter按钮
- 24. 按下按钮后调出类(小部件)的方法?
- 25. 如何阻止用户多次按下按钮
- 26. 当按下多次倒带按钮时,应用程序崩溃
- 27. 多次按下按钮加载多个页面(Android)
- 28. 按下按钮时调用js函数
- 29. 使按钮调用相同按钮的方法
- 30. Kivy按钮无法按下
你需要一个标志。钥匙释放后重置标志。 –