Seite 1 von 2
Dauer eines Mausklicks emittleln?
Verfasst: 21.06.2013 23:17
von TheNewOne
Hallo zusammen,
ich bräuchte ein bisschen Hilfe. Für ein kleines Spiel im Screen muss ich die Dauer eines Mausklicks ermitteln. Ich hab es mit ElapsedMilliseconds() probiert aber es funktioniert nur wenn mein Programm nicht im Screen läuft. Wie könnte man das sonst noch lösen?
Vielen Dank für alle Antworten schon mal im voraus.
Re: Dauer eines Mausklicks emittlen?
Verfasst: 21.06.2013 23:21
von ts-soft
TheNewOne hat geschrieben:Ich hab es mit ElapsedMilliseconds() probiert aber es funktioniert nur wenn mein Programm nicht im Screen läuft.
ElapsedMilliseconds() funktioniert vollkommen unabhängig von Screen, Fenster oder sonstwas, aber ohne
ausführbaren Code, der das Problem aufzeigt, wird wohl keiner den Fehler finden können.
Re: Dauer eines Mausklicks emittlen?
Verfasst: 21.06.2013 23:27
von TheNewOne
Ich habe es in etwa so gelöst:
Code: Alles auswählen
Global zeit = 10
If MouseButton(#PB_MouseButton_Left)
Start = ElapsedMilliseconds()
zurueck:
If (ElapsedMilliseconds() - Start)/1000 < zeit
Debug (ElapsedMilliseconds() - Start)/1000
Goto zurueck
Else
Debug "Ready"
EndIf
EndIf
Aber durch das Goto hängt sich das Programm auf bis die Schleife durchlaufen ist.
Wie könnte man das eleganter lösen?
Re: Dauer eines Mausklicks emittlen?
Verfasst: 21.06.2013 23:47
von ts-soft
Du mußt den Vergleich in Deinem normalem Loop durchführen, damit dieser weiter läuft und wenn ready,
entsprechend reagieren.
Und natürlich ohne dem böhzen GOTO

Re: Dauer eines Mausklicks emittlen?
Verfasst: 22.06.2013 10:56
von bobobo
tz tz .. hör mal auf Anfänger mit dem ollen GOTO-Dogma zu langweilen. Was Herr Dykstra 1968 (!!) mal fomuliert hat heute noch als brauchbare These hinzustellen, ist mindestens anmassend.
Siehe auch mal z.B.
LinuxKernel.

Re: Dauer eines Mausklicks emittleln?
Verfasst: 22.06.2013 11:26
von Bisonte
So ungefähr würde ich das lösen...
Code: Alles auswählen
Global Zeit = 10 * 1000 ; entspricht dann auch 10 Sekunden
; irgendwo in der Eventloop
If MouseButton(#PB_MouseButton_Left) And PressedLeft = 0
StartTimer = ElapsedMilliseconds()
PressedLeft = 1
EndIf
If PressedLeft And MouseButton(#PB_MouseButton_Left)
If ElapsedMilliseconds() - StartTimer > Zeit
Debug "Zeit überschritten"
StartTimer = 0
PressedLeft = 0
Else
Debug "Die 10 Sekunden sind noch nicht um"
EndIf
Else
If MouseButton(#PB_MouseButton_Left) = 0
Debug "Dauer des Klicks = "+Str(ElapsedMilliseconds()-StartTimer)+"ms"
StartTimer = 0
PressedLeft = 0
EndIf
EndIf
ungetestet
Re: Dauer eines Mausklicks emittleln?
Verfasst: 22.06.2013 15:11
von TheNewOne
Bisonte hat geschrieben:So ungefähr würde ich das lösen...
Code: Alles auswählen
Global Zeit = 10 * 1000 ; entspricht dann auch 10 Sekunden
; irgendwo in der Eventloop
If MouseButton(#PB_MouseButton_Left) And PressedLeft = 0
StartTimer = ElapsedMilliseconds()
PressedLeft = 1
EndIf
If PressedLeft And MouseButton(#PB_MouseButton_Left)
If ElapsedMilliseconds() - StartTimer > Zeit
Debug "Zeit überschritten"
StartTimer = 0
PressedLeft = 0
Else
Debug "Die 10 Sekunden sind noch nicht um"
EndIf
Else
If MouseButton(#PB_MouseButton_Left) = 0
Debug "Dauer des Klicks = "+Str(ElapsedMilliseconds()-StartTimer)+"ms"
StartTimer = 0
PressedLeft = 0
EndIf
EndIf
ungetestet
Das liefert bei mir folgendes:
Code: Alles auswählen
[14:59:12] Dauer des Klicks = 15921415ms
[14:59:12] Dauer des Klicks = 15921430ms
[14:59:12] Dauer des Klicks = 15921446ms
[14:59:12] Dauer des Klicks = 15921462ms
[14:59:12] Dauer des Klicks = 15921477ms
[14:59:12] Dauer des Klicks = 15921493ms
[14:59:12] Dauer des Klicks = 15921508ms
[14:59:12] Dauer des Klicks = 15921540ms
[14:59:12] Dauer des Klicks = 15921555ms
[14:59:12] Dauer des Klicks = 15921571ms
[14:59:12] Dauer des Klicks = 15921586ms
[14:59:12] Dauer des Klicks = 15921602ms
[14:59:12] Dauer des Klicks = 15921618ms
[14:59:12] Dauer des Klicks = 15921633ms
[14:59:12] Dauer des Klicks = 15921649ms
[14:59:12] Dauer des Klicks = 15921664ms
[14:59:12] Dauer des Klicks = 15921680ms
[14:59:12] Dauer des Klicks = 15921696ms
[14:59:12] Dauer des Klicks = 15921711ms
[14:59:12] Dauer des Klicks = 15921727ms
[14:59:12] Dauer des Klicks = 15921742ms
[14:59:12] Die 10 Sekunden sind noch nicht um
[14:59:12] Die 10 Sekunden sind noch nicht um
[14:59:12] Die 10 Sekunden sind noch nicht um
[14:59:12] Die 10 Sekunden sind noch nicht um
[14:59:12] Die 10 Sekunden sind noch nicht um
[14:59:12] Die 10 Sekunden sind noch nicht um
[14:59:12] Dauer des Klicks = 109ms
[14:59:12] Dauer des Klicks = 15921883ms
[14:59:12] Dauer des Klicks = 15921898ms
[14:59:12] Dauer des Klicks = 15921914ms

Re: Dauer eines Mausklicks emittleln?
Verfasst: 22.06.2013 15:32
von captain_hesse
Hallo
Ich würde es so machen:
Code: Alles auswählen
InitMouse()
InitSprite()
OpenWindow(0, 0, 0, 320, 200, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 320, 200)
ClearScreen(0)
StartDrawing(ScreenOutput())
DrawText(0,0,"drücke die linke Maustaste")
StopDrawing()
FlipBuffers()
Repeat
WindowEvent()
ExamineMouse()
Start = ElapsedMilliseconds()
While MouseButton(#PB_MouseButton_Left)
ExamineMouse()
ti=(ElapsedMilliseconds() - Start)
Wend
If ti>0
Debug "du hast die linke Maustaste "+Str(ti)+"ms gehalten"
ti=0
EndIf
Until MouseButton(#PB_MouseButton_Right)
Gruß Armin
Re: Dauer eines Mausklicks emittleln?
Verfasst: 22.06.2013 15:38
von ts-soft
@captain_hesse
Dein Code ist zwar eleganter als das Beispiel des Threadstellers, aber hat dasselbe Problem.
Das Programm wird im While:Wend Block blockiert, und darum ging es ja, das Programm soll
weiterlaufen während der Messung.
Re: Dauer eines Mausklicks emittleln?
Verfasst: 22.06.2013 15:57
von Bisonte
sagte ja auch ungetestet....

nunmal getestet folgendes
Code: Alles auswählen
InitMouse()
InitSprite()
OpenWindow(0, 0, 0, 320, 200, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 320, 200)
ClearScreen(0)
StartDrawing(ScreenOutput())
DrawText(0,0,"drücke die linke Maustaste")
StopDrawing()
FlipBuffers()
Global Zeit = 10 * 1000
Repeat
WindowEvent()
ExamineMouse()
; irgendwo in der Event Loop ...
If MouseButton(#PB_MouseButton_Left)
If PressedLeft = 0
StartTimer = ElapsedMilliseconds()
PressedLeft = 1
EndIf
If PressedLeft = 1
If ElapsedMilliseconds() - StartTimer > Zeit
Debug "Zeit überschritten"
StartTimer = 0
PressedLeft = 0
End ; Hier das end damit man sieht das es wirkt
EndIf
EndIf
Else
If MouseButton(#PB_MouseButton_Left) = 0
If PressedLeft = 1
Debug "Dauer des Klicks = "+Str(ElapsedMilliseconds()-StartTimer)+"ms"
StartTimer = 0
PressedLeft = 0
End ; Hier das end damit man sieht das es wirkt
EndIf
EndIf
EndIf
; ....
Delay(5)
Debug "Läuft" ; Damit man sieht das es weiterläuft
Until MouseButton(#PB_MouseButton_Right)