这里是我的键盘回调方法的定义,我用它来检查2D基本游戏的用户输入。不过,我在处理某些同步按键时遇到了问题。
例如,如果我按住右箭头键和向上箭头键,玩家将按其应有的方向向屏幕右上角移动45度。然后,当我仍然按住向上键和右键时,如果我按空格键(这会发射一个弹丸),这也是有效的。
然而,如果我按住左键和下箭头键,玩家会按它应该的方式移动,但是当我按下空格键时,我没有收到输入响应,所以在向下移动和向左移动时我不能发射弹丸。所有其他的动作+射弹组合都能工作,只是左下角不能.我搞不懂为什么。有什么想法吗?
if (key == GLFW_KEY_LEFT)
{
GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_LEFT, action);
}
else if (key == GLFW_KEY_RIGHT)
{
GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_RIGHT, action);
}
else if (key == GLFW_KEY_UP)
{
GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_UP, action);
}
else if (key == GLFW_KEY_DOWN)
{
GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_DOWN, action);
}
else if (key == GLFW_KEY_SPACE)
{
GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_SPACE, action);
}
else { }发布于 2014-01-11 05:29:45
滚转是允许键盘一次正确注册多个按键的属性。键盘按行和列连接。即使键盘不是方形的,单独的键也在一个连接开关的大致方阵中。控制器连接一行,然后测试以查看哪些列被击中。一些关键组合“影子”其他。控制器可以判断输入是否不明确,并且不发送任何键。
更好的键盘使用二极管的安排,以避免含糊不清,从而支持“完全翻转”,虽然在实践中USB限制你所有的修饰符加上6个不同的键码一次。
发布于 2014-01-11 05:21:16
听起来像蹩脚的键盘。
你可能得去买一个更好的。
或者使用不同的键组合。
发布于 2021-01-06 07:45:23
代码应该是
if (key == GLFW_KEY_LEFT)
{
GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_LEFT, action);
}
if (key == GLFW_KEY_RIGHT)
{
GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_RIGHT, action);
}
if (key == GLFW_KEY_UP)
{
GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_UP, action);
}
if (key == GLFW_KEY_DOWN)
{
GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_DOWN, action);
}
if (key == GLFW_KEY_SPACE)
{
GameController::getInstance()->getPlayer()->changeKeyPress(GLFW_KEY_SPACE, action);
}问题是,您的代码一次只检测到一个键按,所以当您同时按左键和右键时,只会触发if (key == GLFW_KEY_LEFT)。
https://stackoverflow.com/questions/21057312
复制相似问题