【发布时间】:2011-03-07 12:12:17
【问题描述】:
我用 SFML 和 OpenGL 编写了一个简单的程序,它绘制了一个可以用箭头键在屏幕上移动的旋转方块。
它在我测试过的所有 Linux 和 Mac 计算机上都可以正常工作,但是当我尝试在 Windows 上移动方块时(通过按住箭头键),它会移动一小段距离,然后停止移动和旋转。我很确定程序卡在GetEvent 方法中 - 我的猜测是,当我按住键足够长的时间让它开始重复时,事件堆栈会在我可以之前不断添加新事件弹出所有内容(如果我将 Windows 上的键重复率降至最低,那么问题就会消失 - 虽然我不太喜欢将其作为解决方案)。
我发现按住 Alt、Ctrl、Delete、Page up、Page down、Home、End 等也会导致这种行为(即使我没有在程序中专门检测到这些键中的任何一个),但所有字母键、空格键、回车键、退格键和键盘箭头键工作正常(即,如果我按住它们太久,它们不会导致程序暂停)。
我没有确切的代码(我刚刚关闭了笔记本电脑),但它看起来像:
while(running) {
while(app.GetEvent(event))
if(event.Type==sf::Event::Closed) running=false;
if(input.IsKeyDown(sf::Key::Right)); // move right
// etc etc
// update rotation
// draw everything
}
关于确切的问题可能是什么以及如何解决它的任何想法?
【问题讨论】:
-
您是否尝试过将键状态存储在布尔值中,然后根据布尔值进行逻辑处理?所以 。 . . . . if(input.IsKeyDown(sf::Key::Right)) 正确 = true; . . . . . . if(right) moveRight();