big-bang
不
轮询键盘,这就是问题所在。相反,它叫你的
on-key
每当操作系统传递按键事件时,处理程序。当您按住键盘上的键时,操作系统
将
根据您在计算机上配置按键重复的速率,发送许多按键事件,但除了允许用户键入文本之外,您不希望依赖于此。
当前压力
,并使用该信息更新玩家角色在游戏中的位置
on-tick
处理器,在可靠的时钟上执行。例如,定义如下所示的世界状态:
(struct world-state (player-posn keys))
(struct keys-state (up right down left))
(define initial-world (world-state initial-player-posn (keys-state #f #f #f #f)))
按键
world-state-keys
到
#t
,并添加相应的
on-release
#f
(struct velocity (x y))
(define (key-state->magnitude v)
(if v 1 0))
(define (keys-state->velocity s)
(velocity (- (key-state->magnitude (keys-state-right s))
(key-state->magnitude (keys-state-left s)))
(- (key-state->magnitude (keys-state-up s))
(key-state->magnitude (keys-state-down s)))))
您可以在中使用该信息
以可靠的速率更新玩家位置,而不是依赖操作系统配置的键重复速率的不确定性行为。