J'ai fait cette fonction ici pour obtenir un événement du clavier :

let get_move() : string =
let e = Graphics.wait_next_event [Key_pressed] in
let ke = if e.keypressed then Printf.sprintf "%c" e.key else "" in
ke;;

Je fais un tetris, donc j'aimerais que le bloc puisse descendre pendant que cette fonction attend un événement.

Actuellement, lorsqu'il attend un événement, il "met en pause" la boucle. Que dois-je faire ?

0
Frink Léo 10 nov. 2020 à 18:39

1 réponse

Meilleure réponse

Je n'ai jamais utilisé Graphics moi-même, mais juste en lisant le documentation Je suggérerais d'utiliser soit loop_at_exit avec l'événement Poll :

Graphics.loop_at_exit [Key_pressed; Poll] begin fun e ->
  if e.keypressed then
    ...
  else
    ...
end

Ou avec votre propre boucle, utilisez key_pressed< /a> pour vérifier si vous pouvez appeler read_key sans bloquer :

let get_move () : char option =
  if Graphics.key_pressed () then
    Some (Graphics.read_key ())
  else
    None
0
glennsl 11 nov. 2020 à 18:01