AMD64マシンでLinux用のSBCLを使用しています。
関数ANIMTESTは、CANVASウィジェットを使用してLTKウィンドウをインスタンス化します。BARRIERとFOLLOWERの2つのアイテムがキャンバスに存在します。両方とも連続的に回転し、BARRIERはキャンバスの中央にあり、FOLLOWERはマウスを追跡することを目的としており、意図したとおりに機能していません。私の最初の試み(コメントを参照)では、マウスの絶対画面座標が、2つの間のオフセットを考慮せずに、キャンバス内の相対座標として解釈されました。ltk.lispとdocsを検索した後、SCREEN-MOUSE-X / Yを見つけました(2回目の試行、コメントを参照)。ドキュメントによると、SCREEN-MOUSE-X&-Yを使用しているように感じますが、なぜ機能しないのですか?=注=ANIMTESTを含むファイルと、それをサポートするパッケージは、エラーなしでロードおよび実行されます。私が定義した関数(UCTK-BEAMなど)はテストされ、正常に実行されます。
(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)))))
前もって感謝します!