gpt4 book ai didi

c++ - SDL_PollEvent 未拾取所有事件

转载 作者:行者123 更新时间:2023-11-28 08:04:45 24 4
gpt4 key购买 nike

我目前正在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com