2013-04-13 125 views
0

我想使用SDL檢查按鍵是否被按下。 我不工作。還嘗試使用事件,但沒有發生SDL_KEYDOWN事件。 Visual C++ 2010 Express,Windows7。 也許我已經設置了SDL或項目錯誤?我怎麼會知道?無法讀取鍵盤輸入(SDL_GetKeyState)

SDL_PumpEvents(); 
Uint8 *keys = SDL_GetKeyState(NULL); 
if (keys[SDLK_RIGHT]) {   
    this->player.xf+=2.0f;  // never reached 
} 

回答

3

documentationSDL_GetKeyState()說明必須每指針僅調用一次。

Uint8 *keys = SDL_GetKeyState(NULL);分配內存(!)並返回指向數組的指針。這個數組在整個程序持續時間內都是有效的,不應該被釋放。

調用此命令後,您將指向您的陣列,您可以使用它來檢查密鑰的狀態,其中
keys[ SDLK_anykey ]

如果您想更新您的keys陣列您只需撥打SDL_PumpEvents();

+0

感謝這一重要信息。 但我仍然沒有得到任何鍵盤輸入。 注意:我只用於鍵盤輸入的SDL。這是一個Cocos2d-x應用程序,不幸的是它沒有鍵盤支持。這可能是問題嗎? –

+0

@KarlH。不知道,我不熟悉科科斯,或者你是如何實現這一切的。查看SDL的教程,確保您的活動設置正確。 – 2013-04-14 08:47:28

0

通常SDL_PollEvent把手拉keystate,至極最終調用SDL_PumpEvents()

確實,您不需要在每個循環迭代中創建一個新指針,但是您的代碼無論如何應該工作得很好。如果我們要找到問題的「來源」,則需要提供一些額外的細節。

1

我知道這是舊的,但如果它有一個正確的答案會因爲我犯了同樣的簡單錯誤而節省了我幾個小時。

SDL_GetKeyState(NULL)在OP的代碼返回一個const指針數組的掃描碼

if (keys[SDLK_RIGHT])一個列表上方是一個KEYCODE

SDL_SCANCODE_RIGHT = 79 

SDLK_RIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RIGHT) //這是出界了我的系統上