- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用 SDL 制作一款游戏,但我遇到了一个问题,即 SDL 无法获取某些事件。例如,我会按“w”向前移动,同时移动鼠标环顾四周。但是假设我然后按“a”或“d”,SDL 不会选择这些事件,甚至当我释放“w”时,SDL 也不会选择 KEYUP 事件。我首先在 windows 中编写这段代码并且一切正常,但是在切换到 ubuntu 之后,它不再按预期工作了。这是我轮询事件的主循环:
while(Running)
{
while(SDL_PollEvent(&event))
Events(&event);
if( active ){
Loop();
Render();
}
}
这是 Events() 中的代码:
switch(Event->type)
{
case SDL_QUIT:
Running = false;
break;
case SDL_KEYDOWN:
switch(Event->key.keysym.sym)
{
case SDLK_ESCAPE:
Running = false;
break;
case SDLK_a:
keyStates['a'] = true;
break;
case SDLK_s:
keyStates['s'] = true;
break;
case SDLK_d:
keyStates['d'] = true;
break;
case SDLK_w:
keyStates['w'] = true;
break;
case SDLK_LSHIFT:
camera.setSpeed(2.0f);
break;
}
break;
case SDL_KEYUP:
switch(Event->key.keysym.sym)
{
case SDLK_a:
keyStates['a'] = false;
break;
case SDLK_s:
keyStates['s'] = false;
break;
case SDLK_d:
keyStates['d'] = false;
break;
case SDLK_w:
keyStates['w'] = false;
break;
case SDLK_LSHIFT:
camera.setSpeed(1.0f);
break;
}
break;
case SDL_MOUSEBUTTONDOWN:
switch(Event->button.button)
{
case SDL_BUTTON_MIDDLE:
mouse.middle = true;
break;
}
break;
case SDL_MOUSEBUTTONUP:
switch(Event->button.button)
{
case SDL_BUTTON_MIDDLE:
mouse.middle = false;
break;
}
break;
case SDL_MOUSEMOTION:
if( moving ){
camera.lookat(float(Event->motion.x - winWidth/2),float(Event->motion.y - winHeight/2), MOUSE_SENSITIVITY, dt);
SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
SDL_WarpMouse(winWidth/2, winHeight/2);
SDL_EventState(SDL_MOUSEMOTION, SDL_ENABLE);
}
break;
}
最佳答案
keyStates['a'] = true;
为此有 SDL_GetKeyState
。使用它而不是手动维护数组。
Uint8 keys[SDLK_LAST];
Uint8* sdlKeys = SDL_GetKeyState(0);
memcpy(keys, sdlKeys, sizeof(keys));
.
bool keyPressed(SDLKey key){
return keys[key] == SDL_PRESSED;
}
同时检查 documentation .
关于c++ - SDL_PollEvent 未拾取所有事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10507144/
所以我正在阅读这篇文章,其中包含“SDL 中多线程编程的提示和建议”-https://vilimpoc.org/research/portmonitorg/sdl-tips-and-tricks.ht
我正在 OpenGL 中创建一个游戏,遇到 SDL_PollEvent 问题,没有接收到所有事件,例如,如果我按住一个键,我必须等待大约 1-3 秒,程序才会意识到我刚才有什么完毕。这是我的mai
我目前正在使用 SDL 制作一款游戏,但我遇到了一个问题,即 SDL 无法获取某些事件。例如,我会按“w”向前移动,同时移动鼠标环顾四周。但是假设我然后按“a”或“d”,SDL 不会选择这些事件,甚至
我正在使用 SDL 库来捕获屏幕上的触摸和鼠标事件。但是如果我断开触摸屏并重新连接它,有时我会停止获取手指触摸事件,即 SDL_FINGERMOTION、SDL_FINGERDOWN、SDL_FING
这是SDL2代码的一部分 SDL主函数 int main(int argc,char *argv[]) { ... ... bool quit=false; S
我正在阅读一本有关SDL的介绍性书籍代码,并且有这样的示例代码: void Game::handleEvents() { SDL_Event event; if (SDL_PollEv
我使用 SDL2 在 C++ 中拼凑了一个非常基本的游戏循环,我注意到每隔几秒,SDL_PollEvent 似乎异常缓慢,即使没有任何事情发生也是如此。 我发送了 deltaTime 来控制每个循环,
我最近才开始使用 C 语言并使用 SDL,所以我确信我搞砸了一些基本的东西,但我能找到的每个示例代码看起来都像我的,除了我的不起作用。因此,欢迎任何帮助。 #include #include in
我目前正在浏览 SDL2 的 Lazy Foo 教程(我在 Linux 机器上这样做),我遇到了一些错误,其中包含 SDL_PollEvent 在我的主要循环似乎阻止了 SDL_UpdateWindo
我使用 SDL2 在 C++ 中拼凑了一个非常基本的游戏循环,我注意到每隔几秒,SDL_PollEvent 似乎异常缓慢,即使没有发生任何事情。 我将我的 deltaTime 发送到控制台每个循环,它
我目前正在使用 C 和 gcc 编译器来处理 SDL2。我已经设法让图像在 2 秒后自动加载并关闭,但现在我想等到用户按下顶部的 X 按钮,或者用户按下 ESC 键. 但是,在几个打印语句显示一切正常
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我已经使用 SDL 一段时间了,但现在看来我在处理键盘事件时一直在以错误的方式做事。 通常我的主循环看起来像这样: int main() { SDL_Init(SDL_INIT_VIDEO);
我有一个程序可以使用 xset dpms force on/off 打开和关闭屏幕,并且还可以循环调用 SDL_PollEvent(&e)。使用 xset 关闭显示器后,任何对 SDL_PollEve
我是一名优秀的程序员,十分优秀!