John,
Globals! Globals! We don't need no stinking globals!
But seriously, here is a case where an object oriented approach fits
very nicely. It also is a good case that demonstrates what an
earlier poster today was saying about repeat loops. In your code,
you have a repeat loop constantly running updating a field on screen.
So, while your code displays correctly, you have effectively locked
out any user interaction because of your "tight" repeat loop.
Another approach is to use a behavior attached to a field or text
member. The behavior would check the time every exit frame event,
and update the display whenever it needs to. This way, it would
allow for any other interactivity your program wants to do. And,
because it is a behavior and does its own time tracking using its own
property variables, there is no need to use "startTimer". So, by
using a behavior you can have as many count down timers running
concurrently as you want. Try dropping this behavior onto a field or
text member and see if it does what you want:
-- Countdown timer
property spriteNum
property pStartingMilliseconds -- milliseconds where counting started
property pStringCurrentlyDisplayed -- copy of string currently displayed
property pTotalMilliseconds -- total milliseconds to count down
property pfDone -- FALSE until done, then TRUE
on beginSprite me
-- set this to the number of seconds you want to count
-- or replace this with a getPropertyDescriptionList where user
enters a number
startingSeconds = 10
pTotalMilliseconds = (startingSeconds + 1) * 1000
pStartingMilliseconds = the milliseconds
pfDone = FALSE
end
on exitFrame me
if pfDone then
return -- nothing more to do
end if
-- A little math
millisecondsElapsed = the milliseconds - pStartingMilliseconds
countDownMilliseconds = pTotalMilliseconds- millisecondsElapsed
if countDownMilliseconds <= 0 then
countDownMilliseconds = 0 -- don't go negative on me!
end if
me.mDisplay(countDownMilliseconds) -- show it
end
on mDisplay me, nMillisecondsToDisplay
secondsToShow = nMillisecondsToDisplay / 1000 -- integer divide,
throws away fractional amount
stringToDisplay = string(secondsToShow)
-- This is an optimization, only update the string if it is different
-- from what we already have
if stringToDisplay <> pStringCurrentlyDisplayed then
sprite(spriteNum).member.text = stringToDisplay
pStringCurrentlyDisplayed = stringToDisplay
-- Check for done
if pStringCurrentlyDisplayed = "0" then
alert("Done") -- do whatever you want here
pfDone = TRUE
end if
end if
end
If this doesn't make sense, add a few breakpoints and step through
the handlers with the debugger until you see what's going on.
Irv
At 7:47 AM +1000 10/25/01, John Trentini wrote:
>Hi guys,
>
>I have made a timer to countDown from 10 seconds
>to zero and it works but I cannot understand why I
>had to subtract an additional value of one from the following line:
>
> gMyTime = 10 - (gMyTime -1) -1
>
>without this the counter will start from 11 rather than 10.
>
>I would have thought that :
> gMyTime = 10 - (gMyTime -1)
>would do the job but...
>
>
>Can anyone be kind enough to explain this to me?
>
>
>Here is the full code:
>
>on prepareFrame
> set the text of field "Ten" = "" --resets the text to empty
>end
>
>
>on exitFrame me
> global gMyTime
> startTimer
> go to the frame
> repeat while the timer <= 10*60 --10 seconds
> Ctime
> put gMyTime into field "Ten"
> end repeat
> halt
>
>end
>
>on Ctime
> global gMyTime
> gMyTime = the timer /60 -- set the timer to seconds
> gMyTime = 10-(gMyTime-1)-1 --detract one with each second
>
>end
>
>Thanks
>
>JohnT
>
>
>
>[To remove yourself from this list, or to change to digest mode, go to
>http://www.penworks.com/LUJ/lingo-l.cgi To post messages to the list,
>email [EMAIL PROTECTED] (Problems, email [EMAIL PROTECTED])
>Lingo-L is for learning and helping with programming Lingo. Thanks!]
--
Lingo / Director / Shockwave development for all occasions.
(Home-made Lingo cooked up fresh every day just for you.)
[To remove yourself from this list, or to change to digest mode, go to
http://www.penworks.com/LUJ/lingo-l.cgi To post messages to the list,
email [EMAIL PROTECTED] (Problems, email [EMAIL PROTECTED])
Lingo-L is for learning and helping with programming Lingo. Thanks!]