Clojure Quil медленный ввод клавиш - PullRequest
0 голосов
/ 28 февраля 2019

В последнее время изучаю немного Clojure.Просто делаю простую игру с библиотекой Quil, где я могу перемещаться с помощью клавиш со стрелками, но я столкнулся с небольшой (но раздражающей) проблемой - когда я удерживаю клавишу со стрелкой, мой персонаж перемещается на экране, но послепервое небольшое движение, есть задержка, пока персонаж не начнет двигаться снова.Как только персонаж начинает двигаться снова, движение продолжается без проблем.По сути, это то, что удерживаемая клавиша не регистрируется программой почти секунду после первого легкого движения.Это кажется такой маленькой проблемой, но это очень заметно и раздражает.Также я хотел бы узнать, почему это происходит просто для изучения.

Под небольшим движением я имею в виду, что нажатие клавиши мгновенно регистрируется, и персонаж немного двигается.Также, если я продолжу быстро нажимать на клавишу, все нажатия мгновенно регистрируются, и персонаж движется так, как вы ожидаете.Проблема возникает только тогда, когда я удерживаю клавишу.Есть идеи, что может быть причиной этого и как это исправить?Вот эскиз с обработчиком нажатой клавиши.Спасибо.

(q/defsketch hello-quil
:title "Game"
:size [800 500]
; setup function called only once, during sketch initialization.
:setup setup
; update-state is called on each iteration before draw-state.
:update update-state
:draw draw-state
:key-pressed
(fn [state { :keys [key key-code] }]
(case key
  (:up) (if (> (state :p-left) 5) (assoc state :p-left (- (state :p-left) 15)) state)
  (:down) (if (< (state :p-left) 395) (assoc state :p-left (+ (state :p-left) 15)) state)
  state))
:features [:keep-on-top]
; This sketch uses functional-mode middleware.
; Check quil wiki for more info about middlewares and particularly
; fun-mode.
:middleware [m/fun-mode])

1 Ответ

0 голосов
/ 28 февраля 2019

Не полагайтесь на повторение ключевого события, когда оно удерживается нажатым.Используйте key-released и время в функциях обновления.Переведите key-down в ваше состояние, установите true в key-pressed и false в key-released, затем обновите положение вашего персонажа в update-state, когда key-down равно true.

...