我用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
}
关于确切的问题可能是什么以及如何解决它的任何想法?