millisecs()

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Frusciante

Betreff: millisecs()

BeitragSa, Sep 10, 2005 14:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Sep 10, 2005 14:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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
Twitter

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Sep 10, 2005 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
skey-z: So habe ich das sonst auch gemacht,
aber dies ist für mich viel verständlicher!

BlitzBasic: [AUSKLAPPEN]

Global Das_Naehste_mal_in
...
...

If MilliSecs() > Das_Naehste_mal_in
Das_Naehste_mal_in = MilliSecs() + 200
;DeinCode
End If


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+]

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Sep 10, 2005 14:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Sep 10, 2005 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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
Twitter

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Sep 10, 2005 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragSa, Sep 10, 2005 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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
Twitter

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Sep 10, 2005 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group