もうちょっと遊んでみる
マウスをクリックしたところへ、青い円が飛んでいく:
#lang frtime (require frtime/animation) (define phase (wave 100)) (define clicked-time (hold (left-clicks . ==> . (lambda (_) (snapshot (phase) phase))) (snapshot (phase) phase))) (define target-pos (hold (left-clicks . ==> . (lambda (_) (snapshot (mouse-pos) mouse-pos))) (make-posn 10 10))) (define source-pos (hold (left-clicks . ==> . (lambda (_) (snapshot (circle-pos) circle-pos))) (make-posn 10 10))) (define distance (let ([ax (posn-x target-pos)] [ay (posn-y target-pos)] [bx (posn-x source-pos)] [by (posn-y source-pos)]) (sqrt (+ (sqr (- ax bx)) (sqr (- ay by)))))) (define circle-t (let ([t (- phase clicked-time)]) (if (< t distance) (/ t distance) 1))) (define circle-pos (if (= distance 0) target-pos (posn+ (posn* source-pos (- 1 circle-t)) (posn* target-pos circle-t)))) (display-shapes (list (make-circle circle-pos 10 "blue") (make-ring target-pos 15 "green")))
おそらくGCのためだが、ときどき動きが固まる。うーん…