首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用GLFW处理输入

用GLFW处理输入
EN

Stack Overflow用户
提问于 2014-01-11 01:14:55
回答 3查看 4K关注 0票数 1

这里是我的键盘回调方法的定义,我用它来检查2D基本游戏的用户输入。不过,我在处理某些同步按键时遇到了问题。

例如,如果我按住右箭头键和向上箭头键,玩家将按其应有的方向向屏幕右上角移动45度。然后,当我仍然按住向上键和右键时,如果我按空格键(这会发射一个弹丸),这也是有效的。

然而,如果我按住左键和下箭头键,玩家会按它应该的方式移动,但是当我按下空格键时,我没有收到输入响应,所以在向下移动和向左移动时我不能发射弹丸。所有其他的动作+射弹组合都能工作,只是左下角不能.我搞不懂为什么。有什么想法吗?

代码语言:javascript
复制
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 { }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-11 05:29:45

滚转是允许键盘一次正确注册多个按键的属性。键盘按行和列连接。即使键盘不是方形的,单独的键也在一个连接开关的大致方阵中。控制器连接一行,然后测试以查看哪些列被击中。一些关键组合“影子”其他。控制器可以判断输入是否不明确,并且不发送任何键。

更好的键盘使用二极管的安排,以避免含糊不清,从而支持“完全翻转”,虽然在实践中USB限制你所有的修饰符加上6个不同的键码一次。

票数 1
EN

Stack Overflow用户

发布于 2014-01-11 05:21:16

听起来像蹩脚的键盘

你可能得去买一个更好的

或者使用不同的键组合。

票数 1
EN

Stack Overflow用户

发布于 2021-01-06 07:45:23

代码应该是

代码语言:javascript
复制
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)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21057312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档