My first thought was that the whole thing could be reduced to periodic "move to the points of..." task. That doesn't work out very well. I tried:

move image "sBall" to the points of grc "_ball" in 60 seconds

That gave me a good second hand, but CPU usages was up at 70 percent. Not good. So I went for minor changes to the existing code.


Below is a modified script. Changes:

-- replaced currH,currM,currS with a local array. This complicates the repeat a bit because I have to track both 123 and HMS, but one statement -- put char i of "HMS" into C -- handles that. The upside is that I don't have to use value or do anywhere.
-- replaced:    if N = 0 then put 60 into N
   with:        put (T[i] + 59) mod 60 + 1 into T[i]
The advantage/necessity is that I'm now adding the minutes fraction to the hour position. It can now be greater than 60 (any time from 12:12 to 12:59) The new statement turns 0 into 60, leaves 1 to 60 alone, and turns 61,62,63... into 1,2,3... -- replaced the set the loc of image command into a move command. The balls look much nicer scooting along rather than jumping ;-)
-- used split rather than itemDelimiter

I think that's it, maybe there are a few other minor points. The line count dropped a bit. CPU usage with this script is about 8 percent. For comparison, the scripts from yesterday that set the startAngle of a graphic averaged about 1.5 percent.

geoff



on preOpenStack
  set loc of this stack to the screenLoc
  setTime
end preOpenStack

local sLocation -- array of the locations of the balls
local ringPoints,ringLoc

on setTime
if ringPoints is empty then put the points of grc "_ring" into ringPoints
  if ringLoc is empty then put the loc of grc "_ring" into ringLoc
  put word 1 of the long time into T
  split T using ":"
  repeat with i = 1 to 3
    put char i of "HMS" into C
if i = 1 then put T[1] * 5 + T[2] div 12 into T[1] -- hours works off minutes as well
    put (T[i] + 59) mod 60 + 1 into T[i]
    if sLocation[i] = T[i] then next repeat
    move img (C & "ball") to (line T[i] of ringPoints) without waiting
    put T[i] into sLocation[i]
set the points of grc (C & "seg") to (line T[i] of ringPoints),ringLoc
  end repeat
  send "setTime" to me in (1 - (the long seconds mod 1)) seconds
end setTime

_______________________________________________
use-revolution mailing list
use-revolution@lists.runrev.com
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to