Dauer eines Mausklicks emittleln?
Dauer eines Mausklicks emittleln?
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.
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.
Win7, 64bit, PB 4.60
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Dauer eines Mausklicks emittlen?
ElapsedMilliseconds() funktioniert vollkommen unabhängig von Screen, Fenster oder sonstwas, aber ohneTheNewOne hat geschrieben:Ich hab es mit ElapsedMilliseconds() probiert aber es funktioniert nur wenn mein Programm nicht im Screen läuft.
ausführbaren Code, der das Problem aufzeigt, wird wohl keiner den Fehler finden können.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Dauer eines Mausklicks emittlen?
Ich habe es in etwa so gelöst:
Aber durch das Goto hängt sich das Programm auf bis die Schleife durchlaufen ist.
Wie könnte man das eleganter lösen?
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
Wie könnte man das eleganter lösen?
Win7, 64bit, PB 4.60
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Dauer eines Mausklicks emittlen?
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
entsprechend reagieren.
Und natürlich ohne dem böhzen GOTO

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Dauer eines Mausklicks emittlen?
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.

Siehe auch mal z.B.LinuxKernel.

pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Re: Dauer eines Mausklicks emittleln?
So ungefähr würde ich das lösen...
ungetestet
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
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: Dauer eines Mausklicks emittleln?
Das liefert bei mir folgendes:Bisonte hat geschrieben:So ungefähr würde ich das lösen...
ungetestetCode: 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
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

Win7, 64bit, PB 4.60
- captain_hesse
- Beiträge: 138
- Registriert: 17.05.2009 18:55
- Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
- Wohnort: Saarland
Re: Dauer eines Mausklicks emittleln?
Hallo
Ich würde es so machen:Gruß Armin
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)
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Dauer eines Mausklicks emittleln?
@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.
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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Dauer eines Mausklicks emittleln?
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)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom