0
我目前正在使用SDL製作遊戲,並遇到SDL未收拾某些事件的問題。對於採樣,我會按'w'前進,同時,我正在移動鼠標來環顧四周。但假設我按'a'或'd',SDL將不會選擇這些事件,或者即使當我釋放'w'時,SDL也不會拾取KEYUP事件。我首先在Windows中編寫了這段代碼,它一切正常,但切換到Ubuntu後,它不再按預期工作。這是我的主循環,我輪詢事件:SDL_PollEvent未收集所有事件
while(Running)
{
while(SDL_PollEvent(&event))
Events(&event);
if(active){
Loop();
Render();
}
}
這是)事件中的代碼(:
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;
}
-1:鏈接到首頁並不真的會引導OP到問題的答案沒有不必要的信息。當然,這會讓他們閱讀並最終得出答案,但是有一大堆附加內容無法解決問題。 – user2738698
@ user2738698:夥計。檢查問題的日期和答案。 – SigTerm
那麼?它也不會幫助未來的人。大部分答案都沒有問題,首頁的鏈接無法幫助任何希望解決問題的人。 – user2738698