On Feb 2, 2011, at 7:20 AM, I wrote:

There are a number of other things that would simplify the code, some of which would also make things (slightly) more efficient.

Your sprite switches between its two images every 10 clock-ticks, where a clock-tick defaults to 1/28 second. Instead, just set the tick interval to what you want, and skip the 0.1 and the rounding.

(big-bang ...
(on-tick tick (/ 1 2.8)) ; or (on-tick tick 1/3) or (on- tick tick .382) or whatever
      ... )

On second thought, this may help more than I thought: every clock- tick requires redrawing the screen, so doing one tenth as many clock ticks should significantly reduce the delay and flicker.

And since there are only two possible images in the world, I would probably use a boolean or a pair of symbols or strings to choose between them:
...
(Symbols or booleans would be slightly more efficient, but I introduce strings much earlier in my course than symbols or booleans.)

Obviously, you're using booleans already, so you could make this simpler and more efficient by saying

(define-struct world (pos mouse-pos fred?))
(define initial-world (make-world CENTER CENTER true))
...
(define (sprite-image w)
   (if (world-fred? w) pic1 pic2)))
(define (draw w)
   (place-image
      (rotate (angle-between (world-pos w) (world-mouse-pos w))
                   (sprite-image w))
      (posn-x (world-pos w)) (posn-y (world-pos w))
      BACKGROUND)))

(define (tick w)
   (make-world
      (world-pos w)
      (world-mouse-pos w)
      (not (world-fred? w))))


Stephen Bloch
[email protected]



_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/users

Reply via email to