блокировка выполнения кода при нажатии клавиши

  1. 100 REM !!!SUB
  2. 102 IF (NOT INKEY(0)) THEN RETURN
  3. 104 GOTO 102
  4. ...
  5. 500 IF (UP(0)) THEN GOTO 600
  6. ...
  7. 600 FOR I%=0 TO 2
  8. 602 y%=Y%-5
  9. 604 SPRITEMOVE "select" X%, Y%:SLEEP 50
  10. 606 NEXT I%
  11. 508 GOSUB 100
  12. 510 GOTO 500
Иногда бывают такие ситуации, где нужно сосредоточить внимание на то, сколько раз пользователь нажал на клавишу, при этом не учитывать задержку ее нажатия. С таким я столкнулся например при создании графического анимированного меню, где при нажатии клавиши вниз или вверх указатель меню должен был плавно уползать на строку вниз или вверх соответственно. Но если код анимации выполнялся быстрее, чем пользователь успевал убрать палец с клавиши, указатель мог перескочить на несколько строчек ниже или выше, чем надо. Сначала я использовал SLEEP, но потом подумал, а почему бы не сделать обработку нажатия, как в высокоуровневом интерфейсе? Это прибавило бы немного четкости программе.

Выше я привел пример кода для того же графического меню. В строку 100 я вынес код этого самого блокировщика, как подпрограмму. Далее в строке 500 проверяется нажатие какой либо клавиши и переход на его обработку. В строке 600 обрабатывается данное нажатие. Циклом тут уменьшаются координаты указателя и он плавно движется вверх. Затем запускаем подпрограмму и проверяем, отпустил ли пользователь клавишу - если отпустил, то выход из подпрограммы и возвращение к отлавливанию нажатия клавиш.

Реклама

Мы в соцсетях

tw tg yt gt