Clojure Quil 慢键输入
Clojure Quil slow key input
最近在学习一些 Clojure。只是用 Quil 库制作一个简单的游戏,我可以使用箭头键四处移动,但我 运行 遇到了一个小问题(但很烦人)——当我按住箭头键时,我的角色在屏幕上移动,但是在第一次轻微移动之后,角色再次开始移动之前会有延迟。一旦角色再次开始移动,移动就会毫无问题地连续进行。基本上,感觉是在第一次轻微移动后几乎一秒钟内,被按住的键没有被程序注册。这似乎是一个很小的问题,但它非常引人注目且令人讨厌。我也想知道为什么会发生这种情况只是为了学习。
我所说的轻微移动是指按键立即被记录并且角色移动了一点。此外,如果我继续快速敲击按键,所有按键都会立即注册,并且角色会按照您的预期移动。仅当我按住该键时才会出现问题。任何想法可能导致此问题以及如何解决?这是带有 :key-pressed 处理程序的草图。谢谢
(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])
不要依赖按下按键时为您重复的按键事件。在更新函数中使用 key-released
和时间。将 key-down
放入您的状态,将其设置为 key-pressed
中的 true
和 key-released
中的 false
,然后在 update-state
中更新您的角色位置key-down
是 true
.
最近在学习一些 Clojure。只是用 Quil 库制作一个简单的游戏,我可以使用箭头键四处移动,但我 运行 遇到了一个小问题(但很烦人)——当我按住箭头键时,我的角色在屏幕上移动,但是在第一次轻微移动之后,角色再次开始移动之前会有延迟。一旦角色再次开始移动,移动就会毫无问题地连续进行。基本上,感觉是在第一次轻微移动后几乎一秒钟内,被按住的键没有被程序注册。这似乎是一个很小的问题,但它非常引人注目且令人讨厌。我也想知道为什么会发生这种情况只是为了学习。
我所说的轻微移动是指按键立即被记录并且角色移动了一点。此外,如果我继续快速敲击按键,所有按键都会立即注册,并且角色会按照您的预期移动。仅当我按住该键时才会出现问题。任何想法可能导致此问题以及如何解决?这是带有 :key-pressed 处理程序的草图。谢谢
(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])
不要依赖按下按键时为您重复的按键事件。在更新函数中使用 key-released
和时间。将 key-down
放入您的状态,将其设置为 key-pressed
中的 true
和 key-released
中的 false
,然后在 update-state
中更新您的角色位置key-down
是 true
.