Как проверить нажатую клавишу, используя TSDL в OCAML? - PullRequest
0 голосов
/ 24 января 2019

Это фрагмент кода, который я хочу написать на OCAML, взятый из учебника по C ++:

// Set texture based on current keystate
 const Uint8* currentKeyStates = SDL_GetKeyboardState( NULL );
 if ( currentKeyStates[ SDL_SCANCODE_UP ] ) {
    currentTexture = &gUpTexture;
} else if( currentKeyStates[ SDL_SCANCODE_DOWN ] ) {
    currentTexture = &gDownTexture;
} else if( currentKeyStates[ SDL_SCANCODE_LEFT ] ) {
    currentTexture = &gLeftTexture;
} else if( currentKeyStates[ SDL_SCANCODE_RIGHT ] ) {
    currentTexture = &gRightTexture;
} else {
    currentTexture = &gPressTexture;
}

Этот код C использует библиотеку SDL. В OCAML я использую библиотеку TSDL, которая является тонкой привязкой к библиотеке SDL.

Вот подпись для SDL_GetKeyBoardState

val get_keyboard_state : unit -> (int, Bigarray.int8_unsigned_elt) bigarray

Я не совсем уверен, как это сделать

currentKeyStates[SDL_SCANCODE_UP]

в ОКАМЛ.

Пожалуйста, помогите? Спасибо!

Это то, что я пробовал до сих пор:

let key_state = Sdl.get_keyboard_state () in
key_state.(Sdl.Scancode.up)

Ошибка гласит, что .() не может быть применено к bigarrays ...

1 Ответ

0 голосов
/ 24 января 2019

Вам нужно использовать .{} для индексации Bigarrays:

key_state.{Sdl.Scancode.up}
...