millisecs()
Übersicht

FruscianteBetreff: millisecs() |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich finde den Befehl millisecs ist so kompliziert beschrieben. Ich möchte es für die Bewegung mit der Maus benutzen. Also ein Punkt wird bei einem Mausklick bei jedem Schleifendurchlauf eine x koordinate näher den Mauszeiger gesetzt. Allerdings ist der Punkt immer direkt an der Maus da die Schleife so schnell gut 100 mal durchläuft. Also kann ich sie ja verlangsamen mit millisecs. Kann ich den befehl nicht so einfach verwenden wie Delay? Einfach Millisecs() 200, oder so ertwas ähnliches schriben?
mfg Frusciante² |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
es ist doch ganz einfach, vor der schleife definierst du einmal eine Variable für millisecs:
timer=millisecs() und in der hauptschleife machst du dann deine Abfrage für den punkt zusammen mit der zeitabfrage if (millisecs()-timer > 500) then ;hier deine abfrage für die Punktbewegung endif mit dem wert musst du dann ein wenig rumspielen, hier habe ich mal 500 genommen, also alle 0,5 Sekunden wird geupdatet. |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
skey-z: So habe ich das sonst auch gemacht,
aber dies ist für mich viel verständlicher! BlitzBasic: [AUSKLAPPEN]
Es ist relativ einfach, nehmen wir mal an das Millisecs beim Start des Programms auf 2500 steht. Diese Zeit läuft immer weiter hoch , iss klar oder? Da 2500 größer ist als Das_Naehste_mal_in(beim ersten mal = 0) greift die If Bedingung ! Nun soll erst wieder in 200 millisecs die bedingung zutreffen, als nehmen wir die Aktuelle zeit und packen da noch 200 milli drauf: Das_Naehste_mal_in hat dann den Wert von 2700 erst wenn die interne uhr größer 2700 ist wird die Bedingung erfüllt und erneut ausgeführt! u.s.w. |
||
[BB2D | BB3D | BB+]
|
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Delay und MilliSesc() sind zwei unterschiedliche Sachen. Delay warten die angegebene Zeit in Millisekunden, bis weitere Ausführungen gemacht werden. MilliSecs() gibt die Anzahl der Millisekunden an seid dem der Rechner eingeschaltet wurde. Somit ist Delay ein Befehl der den Rechner warten lässt und MilliSecs() eine Funktion welche dir einen Wert zurrück gibt. Möchtest du denoch das alles mit MilliSecs() machen, so musst du den Wert in eine Variable zwischenspeichern und so oder ähnlich verfahren wie (ich gerade sehe) es skey-z im Beispiel gezeigt hat. CreateTimer(n) währe da auch noch eine Möglichkeit... | ||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
aber der Timer wartet genau so wie Delay und stopt somit die ganze schleifebis zum nächsten Durchlauf. | ||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@skey-z, die Funktion mit MilliSecs() wartet nicht ganz so wie Delay... Delay wartet ab da an, wo Delay ausgeführt wird eine bestimmte Zeit bis es weiter macht. Mit MilliSecs() wird die gesammte Schleife dem Zeittakt eingestellt. Vorrausgesetzt, der Rechner schafft den Zeittakt mit dem ganzen Berechnungen. Mit MilliSecs() stellt man also den Schleifentakt ein, mit Delay wartet man an einer bestimmten Stelle eine bestimmte Zeit lang. | ||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: orginal von hectic
CreateTimer(n) währe da auch noch eine Möglichkeit... mein vergleich von Delay hatte mit dem CreateTimer(n) von dir zu tun und nicht mit der Millisecs() variante, also bitte les dir meinen vorherigen post noch einmal durch. |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo skey-z [EDIT: bezieht sich auf den vorletzten Beitrag], der Timer hält natürlich auch das ganze Programm an und wartet bis zum nächstem 'Zeitimpuls'. Der Timer hält aber nur solang das Programm an bis die differenz des letzten Timeraufrufs und dem aktuellem Timeraufrufs dessen Bedingung erfüllt ist. Delay wartet einfach nur. Wenn ich möchte das mein Programm 30 FPS hat, aber mein Rechner würde 60 schaffen, dann bekomme ich denoch 30 FPS. Mit Delay 33 hätte ich zwar 33ms (1000ms/30FPS) gewartet, es wird aber nicht berücksicht das die Restliche (egentliche) Programmberechnung auch Zeit in Anspruch nimmt. Erst wenn mein Rechner sowieso die 30 FPS nicht mehr schaffen würde, hätte ich den Timeraufruf 'umsonst' gemacht. Wenn aber gewünscht ist das nur eine Berechnung ein bestimmten Zeittackt hat, der restliche Programmabschnit aber mit voll Power berechnet wird, dann ist natürlich eine MilliSecs() -Funktion nicht weg zu denken.
Hier mal ein Beispiel mit Timer und Delay. Mit Space kann man zwischen den beiden wechseln. Mit links/rechts kann die Rechenintensität beeinflusst werden. Man kann beobachten das mit Delay die Rechnergeschwindigkeit linear ab/zu nimmt bei Beeinflussung des xstep. Mit Timer schafft es mein Rechner erst bei xstep=22 nicht mehr so ganz, dann bricht er langsam ein. Bis dahin ist die ms -Anzeige nahezu konstant. Code: [AUSKLAPPEN] Graphics 800,600,32,1
SetBuffer BackBuffer() timer=CreateTimer(10) xstep#=0 ms%=0 w#=0 q#=0 While Not KeyHit(1) If change=0 Then WaitTimer (timer):Text 200,0,"Timer" If change=1 Then Delay 100:Text 200,0,"Delay" If KeyDown(203) Then xstep=xstep-1:If xstep<0 Then xstep=0 If KeyDown(205) Then xstep=xstep+1 If KeyHit(57) Then change=1-change For w=0 To 800 Step 40 For q=0 To xstep Step 0.2 Color 255,255,255 Line q+w,16,q+w,200 Next Next Text 0,0,xstep+" step" Text 100,0,MilliSecs()-ms+" ms" ms=MilliSecs() Flip Cls Wend FreeTimer timer End |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group