Verzögerung (Timer)
Übersicht

![]() |
Kleiner satanBetreff: Verzögerung (Timer) |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo, ich hab die boardsuche und google schon durchsucht aba nix brauchbares gefnden!
meine frage ist wie mache ich nen timer und ne uhr die die sekunden zählen kann??? (bitte so einfach wie möglich erklären) bastian |
||
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
ql:millisecs()
Dieser Befehl zählt die Millisekunden, die seit dem letzten Start Windows verstrichen sind. Also: Code: [AUSKLAPPEN] graphics 640,480,32,1
setbuffer backbuffer() Start=millisecs() repeat cls text 0,0,"Es sind "+((millisecs()-Start)/1000)+" Sekunden vergangen." flip until keydown(1) |
||
![]() |
Kleiner satan |
![]() Antworten mit Zitat ![]() |
---|---|---|
ähm...ok danke
ich versuche mal damit ws anzufangen EDIT: also ich habs jetzt geschaft es zu verstehen *freu* aber wie mach ich das das zu nen countdown wird? wenn ich zu start 60 sekunden hunzufüge kommt ja ne negative zahl rauß! und das is blöd wenn da n minus steht! wie kann ich das ändern? |
||
Kaplan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Na ja das ist einfach.
Initialisiere eine Variable genannt millisec mit 60, eine genannt secs mit 60 und eine genannt min mit maximal 60. Dann einfach der Variable millisecs immer 1 abziehn, wenn diese bei Null angekommen ist den Wert wieder auf 60 setzen und secs 1 abziehen. Wenn secs bei Null angekommen ist, ihren Wert wieder auf 60 setzen und min eins abziehen. Code: [AUSKLAPPEN] Graphics 640,480 setbuffer backbuffer() ;Die 3 Variablen millisec = 60 secs = 60 min = 2 ;Hautpschleife Repeat cls millisec = millisec - 1 if millisec = 0 then millisec = 60 secs = secs -1 end if if secs = 0 then secs = 60 min = min - 1 end if if min = 0 then locate 0,40 print "Countdown wurde beendet." end if locate 0,20 print ""+min+" "+ secs +" "+millisec Flip until keydown(1) end |
||
"Jedes Ereigniss hinterlässt eine Narbe in der Seele des Beteiligten. Manche sind größer als andere, manche aber teilen deine Seele in Zwei."
User posted image User posted image |
![]() |
Kleiner satan |
![]() Antworten mit Zitat ![]() |
---|---|---|
äh...versteh ich das ichtig das eine sekunde einen durchlauf entspricht??? | ||
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
ist auch ein bissl doof erklärt. Ein Durchlauf entspricht natürlich keiner millisekunde
wie wäre es damit: millisecs()+60000 also 60.000 millisekunden drauf das entspricht 60 sekunden und dann guckst du so: Code: [AUSKLAPPEN] x=MilliSecs()+60000
While Not KeyDown(1) SetBuffer BackBuffer() Cls remain=(x-MilliSecs())/1000; verbleibende Zeit errechnen Text 1,1,"Es sind noch "+remain+" Sekunden"; ausgeben auf dem bildschirm Delay 10; damit das programm den speicher nicht auslastet If remain<=0 Then WaitKey:End Flip Wend |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
Kleiner satan |
![]() Antworten mit Zitat ![]() |
---|---|---|
höhö
ich habs jetzt selbst geschaft (aber nur wegen eurer hilfe!) Code: [AUSKLAPPEN] start = MilliSecs()/1000 start = start + 60 Repeat Cls aktuell = MilliSecs()/1000 time = start - aktuell Print time Until KeyHit(1) End euro code fand ich etwas unübersichtig! bitte mekkert jetzt nicht rum weil ich diesen kram mit flip und graphics benutz hab! |
||
Kaplan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kleiner satan hat Folgendes geschrieben: äh...versteh ich das ichtig das eine sekunde einen durchlauf entspricht???
Nein, eine Sekunde entsprechen 60 Durchläufe der Hauptschleife. Da der Variable secs nur 1 abgezogen wird, wenn die Variable millisec mit dem Wert 0 versehen ist. Da pro Durchlauf der Variable millisec nur 1 abgezogen wird, benötigt es 60 Durchläufe um secs 1 abzuziehen, und 360 Durchläufe, um der Variable min 1 abzuziehen. |
||
"Jedes Ereigniss hinterlässt eine Narbe in der Seele des Beteiligten. Manche sind größer als andere, manche aber teilen deine Seele in Zwei."
User posted image User posted image |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
der code stimmt auch so nicht, da man nie weiß, wie lange der code benötigt, um die kommandos durchzuführen | ||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
Ret |
![]() Antworten mit Zitat ![]() |
---|---|---|
Machs doch so....(geht ja auch^^)
Code: [AUSKLAPPEN] Zahl = 10
Repeat Cls Text 100,100,Zahl If MilliSecs()> Timer +1000 Then;Timer einstellen jede 100 secunden aktivieren Timer = MilliSecs() Zahl =Zahl -1 If Zahl < 0 Then Exit;Bei Null zum Ende springen End If Flip Until KeyHit(1) Print "Countdown Ende" mfg Ret |
||
Blau? Chili? was das?
www.bluechiligamez.de.vu www.bluechiligamez.de.vu "Wichtig ist das man nie aufhöhrt zu fragen"Albert einstein |
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Ret
Deine Uhr ist nicht genau. 1. Deine Uhr ist zu langsam (was bei größeren Zeitspannen zum Problem werden kann) 2. Deine Uhr zählt nicht von der Zahl ab, die angegeben wurde sondern von der Zahl-1 Hier ein Beispiel, die (zumindest auf meinem PC) den Zeitunterschied zeigt: Code: [AUSKLAPPEN] Zahl = 0
Zahl2= 0 Start=MilliSecs() Repeat Cls If MilliSecs()> Timer +1000 Then;Timer einstellen jede 100 secunden aktivieren Timer = MilliSecs() Zahl =Zahl +1 EndIf Zahl2=Zahl2+(MilliSecs()-Start) Start=MilliSecs() Text 100,150,"Genaue Zeit: "+(Zahl2/1000) Text 100,100,"Ungenauere Zeit: "+Zahl Flip Until KeyHit(1) Bei mir ist nach ungefähr einer Minute der Genauere Zeitzähler vor dem ungenaueren, obwohl dieser eine Sekunde später startete als der 2. Zeiger->s. Punkt2. Grund von Punkt1: Deine Uhr überprüft immer wenn sie an dem Abschnitt Code: [AUSKLAPPEN] If MilliSecs()> Timer +1000 Then;
angelangt ob die Zeit GRÖSSER als eine Sekunde ist. Dadurch fallen pro Durchlauf immer ein paar Millisekunden unter den Tisch ->Die Uhr wird mit der Zeit ungenau. Grund von Punkt2: Timer ist am Anfang 0. D.h. Timer+1000=1000. Wer kann ein Programm in weniger als einer Sekunde nach dem Start Windows ausführen? Niemand, also ist millisecs()>Timer+1000. Was passiert? Zahl wird im ersten Durchlauf um eins kleiner. |
||
![]() |
kamehan |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich brauch einen timer für die hier erklärte situation:
ich führe eine bestimmte aktion aus, dann läuft ein unsichtbarer timer für 3 sekunden. wenn die selbe aktion in den 3 sekunden erneut ausgeführt wird, soll zum beispiel irgendein sonderbarer klang zu hören sein und ein neuer timer beginnt bis 3 zu zählen. wird in dieser zeit NOCHMAL diese aktion durchgeführt, sollte wieder ein klang zu hören sein, nur ein anderer (noch sonderbarer) und immer so weiter... ich hab leider nur keine ahnung wie ich das anstellen soll ![]() kann mir dabei bitte einer helfen? |
||
Skulk |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das folgende beispiel kannst du leicht erweitern in dem du je eine weitere Case-Abfrage einfügst
Code: [AUSKLAPPEN] iTimerLast = 3000 ; Millisekunden bis zum nächsten Event
iEventCount = 0 ; Anzahl Events die bereits ausgelöst wurden iStartTime = MilliSecs() ; Timer starten While Not KeyHit(1) If iStartTime + iTimerLast <= MilliSecs() Then ; es sind 3 Sekunden vergangen iEventCount = iEventCount + 1 ; Eventzähler um eins erhöhen iStartTime = MilliSecs() ; StartTime zurücksetzen und auf die nächsten 3 sec warten ; iEventCount auswerten Select iEventCount Case 1 Print "Event Nummer eins ausgelöst - spiele Klang" Case 2 Print "Event Nummer zwei ausgelöst - spiele Klang" Case 3 Print "Event Nummer drei ausgelöst - spiele Klang" Case 4 Print "Event Nummer vier ausgelöst - spiele Klang" End Select End If Wend |
||
War doesn't determine who's right,
war determines who's left... |
![]() |
kamehan |
![]() Antworten mit Zitat ![]() |
---|---|---|
ah das sieht sehr gut aus, danke, werde es aber sofort nicht einbauen können aber wird machbar sein, denke ich | ||
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich dachte irgendwie, das wäre mehr so gemeint:
Code: [AUSKLAPPEN] waittime=3000
lasttime=MilliSecs() countevents=0 blabla=LoadSound("E:\rocks.wav") Print blabla SetBuffer BackBuffer() While Not KeyDown(1) Cls If KeyHit(57) Then event=1 If event=1 event=0 If MilliSecs()<lasttime+waittime countevents=countevents+1 lasttime=MilliSecs() SoundPitch blabla,32000*(1+(countevents)*.125) PlaySound(blabla) Print "Bong" Else countevents=1 lasttime=MilliSecs() SoundPitch blabla,32000*1.125 PlaySound(blabla) Print "Bong" EndIf EndIf Flip Delay 1 Wend einfach mal schnell hintereinander drücken und dann mal 3 sekunden warten |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
Skulk |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oh stimmt, da hab ich wohl nicht gescheit gelesen.... | ||
War doesn't determine who's right,
war determines who's left... |
![]() |
kamehan |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmm was nehm ich da jetzt, große auswahl o.O
ne ok, der 2. sieht logischer aus also danke nochmal!!! |
||
Skulk |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das zweite ist auch richtiger ![]() ich hatte es so verstanden: löse alle 3 sekunden an anderes event aus und spiele einen "seltsamen ton" ab. |
||
War doesn't determine who's right,
war determines who's left... |
![]() |
kamehan |
![]() Antworten mit Zitat ![]() |
---|---|---|
lol.."seltsam" xD
na gut vielleicht hab ichs ein bissl dumm erklärt... |
||
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
ach mit viel fantasie ist alles richtig ^^ | ||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group