我正在尝试使用 lispbuilder-sdl 管理lisp中的一些事件。
到目前为止,我得到了这个。
;; Load package :
(ql:quickload "lispbuilder-sdl")
;; main definition:
(defun main (argv)
(defparameter *ticks* 0)
(sdl:with-init ()
(sdl:window 100 100 :title-caption "test")
(sdl:with-events ()
(setf (sdl:frame-rate) 60)
(:quit-event () (progn (sdl:quit-image) (exit) t))
(:mouse-button-down-event
(:button button :x x :y y)
(format t "~&LSHIFT: ~a RSHIFT: ~a BUTTON: ~a X: ~d Y: ~d"
(sdl:get-key-state :sdl-key-lshift)
(sdl:get-key-state :sdl-key-rshift)
button x y))
(:key-down-event
(:key key)
(format t "~& KEY: ~a" key))
(:idle ()))))
;; Entrypoint :
(sb-int:with-float-traps-masked (:invalid :inexact :overflow) (main *posix-argv*))
如果我启动它,会出现一个窗口,我可以点击并滚动,我得到一个输出来描述按下的键和按钮的状态。如果我按下一个键,也一样。细
但是当我按住Shift键时会发生一些奇怪的事情。
如果我这样做,点击时我仍然有输出。但不是滚动时(鼠标滚轮事件)。
所以我猜鼠标滚轮事件只是在换班(向右或向左)时才触发。但只有换档键,我甚至不知道为什么。
所以我不能处理shift +鼠标滚轮事件。
有什么想法吗?
NB :我在OSX上使用的SBCL版本是1.2.11但它在Ubuntu上同时适用于1.3.2和1.2.11。