我正在AMD64機器上使用SBCL for Linux。
功能ANIMTEST使用CANVAS小部件實例化LTK窗口。兩件物品BARRIER和FOLLOWER住在畫布上。兩者都連續旋轉,BARRIER位於畫布的中心,FOLLOWER意圖跟隨鼠標,該鼠標不按預期工作。我的第一次嘗試(見註釋)導致鼠標的絕對屏幕座標被解釋爲畫布內的相對座標,而不考慮兩者之間的偏移。在搜索完ltk.lisp和文檔後,我找到了SCREEN-MOUSE-X/Y(第二次嘗試,請參閱評論)。我覺得我根據文檔使用SCREEN-MOUSE-X & -Y,但它爲什麼不起作用? = Note = 包含ANIMTEST的文件及支持它的包加載並運行時沒有錯誤。 我定義的函數(UCTK-BEAM等)已經過測試並運行良好。無法訪問與CANVAS小部件相關的鼠標座標
(defun animtest()
"Test a spinning figure in LTK"
(with-ltk()
(let* ((cnvs (make-instance 'canvas :width 400 :height 400))
(barrier (uctk-beam 200 200 40 20))
(follower (uctk-beam 0 40 40 20))
(slp-time 50) ; in ms
(bar-theta 0)
(fol-theta 0))
(labels ((update()
(draw barrier nil)
(draw follower nil)
(incf bar-theta (/ pi 15))
(incf fol-theta (/ pi 15))
(geo:set-theta barrier bar-theta)
(geo:set-theta follower fol-theta)
(geo:set-center follower
;== FIRST ATTEMPT ==
(cons (screen-mouse-x cnvs)
(screen-mouse-y cnvs)))
; == SECOND ATTEMPT ==
;(cons (canvasx cnvs (screen-mouse-x cnvs))
; (canvasy cnvs (screen-mouse-y cnvs))))
(after slp-time #'update)))
(pack cnvs :fill :both :expand 1)
(update)))))
提前感謝!