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 :angry:

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.

Bild

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)