Toon posts:

[Director] Timer countdown

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil een tijd countdown van 60 seconde to 0 en bij >= 0 naar een andere marker. De tijd moet wel visueel aftellen en 1 seconde moet ook 1 seconde zijn en niet 1 tick.

Wat ik geprobeerd heb:
- Aan het begin:

on exitFrame me


set tijd = 750
put seconden into member "seconden"

- Aan het eind:

tijd = tijd - 1
if tijd <= 0 then go to marker ("dood")
put tijd into member "seconden"
Hierbij word die 750 snel afgeteld en werkt het, alleen ik wil graag dat het dus seconden zijn en geen ticken.
Het zal heel simpel zijn, maar zodra ik de timer betrek gaat het telkens mis.
Ik kan wel 3600 ticks pakken en dan telkens 60 eraf halen, maar dit gaat veel sneller dan 60 seconden en bovendien wil ik een aftellende 60 in beeld ipv 3600.

[ Voor 15% gewijzigd door Verwijderd op 02-07-2003 01:37 ]


Verwijderd

Ik gebruik hiervoor starttimer/the timer

--zet de tijd op nul
startTimer

--in je main loop
mytime=the timer

-- the timer telt iets van 60 keer per seconden, dus mytime delen door 60 voor een seconde

Verwijderd

Topicstarter
Ja ik heb zo iets geprobeerd, maar uiteindelijk kom ik er dan niet uit. Wat ik moet hebben is zo iets, maar dan werkend en dan omgedraaid (nu telt ie op, hij moet dan van 60 naar 0 )

Global tijd
GLobal sec

-- begin loop
set seconde = 0
set tijd = 0
set sec = 0

-- eind loop
tijd = tijd + 1
if tijd = 60 THEN sec = 1
seconde = 0 + sec
put seconde into member "tijd"
if seconde >= 60 then go to marker ("dood")

Hier gaat denk ik het volgende mis, hij telt tot de 60 en zet de sec dan op 1, daarna telt ie vrolijk door, maar hij passeerd maar 1 x de 60, dus telt ie maar 1 sec op. Dus hij moet bij 60 eigenlijk weer opnieuw beginnen met tellen.
En buiten dat is dit volgens mij afhankelijk van je processor snelheid en niet van echte secondes. Mijn 2700+ zal een stuk sneller loopen dan een 386 (ik noem maar wat).

[ Voor 92% gewijzigd door Verwijderd op 02-07-2003 10:50 ]


Verwijderd

tijd = 60 - my_time_ticker_in_seconden ?!?!

Het gaat er gewoon om dat je met die timer exact de tijd kan afchecken,
hoe je verder die berekening doet.. tja dat is ff coden en slim nadenken.

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
RTFM.

the milliseconds.

global gStartTime

on enterframe
tCurrentTime = the milliseconds
if ((tCurrentTime - gStartTime)>1000)
{
//second expires
gStartTime = tCurrentTime;
}
end

nog beter is natuurlijk 1x gStartTime en dan gewoon delen door 1000 - daar de int bijhouden en zien dat ie veranderd.

Verwijderd

Topicstarter
cel-ed > ik heb zoiets geprobeerd

----- begin
set tijd = 0
set sec = 60
----- eind
tijd = tijd + 1 -- tijd telt op 60 ticks = +/- 1 seconde
if tijd = 60 THEN sec = sec - 1 AND tijd = 0 -- als tijd 60 is dan sec = sec + 1 en tijd weer 0
put sec into member "tijd"
if sec <= 0 then go to marker ("dood")

dit zou volgens mij moeten werken, maar dat doet het helaas niet. :(
misschien omdat ik er geen 'end if' bij heb staan, maar dan krijg ik errors

[ Voor 26% gewijzigd door Verwijderd op 02-07-2003 13:52 ]


Verwijderd

Mischien een typo in je code?, ik gebruik een iets andere syntax

Ik zou de simpele versie zo ongeveer schrijven (moviescript)


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
on StartMovie
  
  startTimer
end

on exitFrame me
  
  --reset timer
  if keyPressed("q") then 
    startTimer
  end if
  
  --calculate seconds starting from 60
  mytime=60-(the timer/60)
  if (mytime<0)then
    mytime=0
    -- or jump somewhere else..
  end if
  
  -- put it in member "tijd" asuming this member is a textmember
  member("tijd").text=string(mytime)
  
  go the frame
end

Verwijderd

Topicstarter
Super cel-ed!

Het werkt :)
Pagina: 1