MouseZSpeed - Bug?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

EPS

Betreff: MouseZSpeed - Bug?

BeitragDi, Aug 05, 2008 23:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi zusammen. Mir ist gerade was komisches aufgefallen bei der Verwendung der Funktion MouseZSpeed().

Ich hab mal folgendes kleine Testprogramm getippt:

Code: [AUSKLAPPEN]
Graphics 640,480,0,2

SetBuffer BackBuffer()
Repeat
   Cls
   Text 100,100,T
   T = T + MouseZSpeed()
   Flip
Until KeyHit(1)


Es ist zu sehen was zu erwarten war. Die Zahl zeigt an in welche Richtung wie of das Scrollrad betätigt wurde. Soweit so schön.

Nun startet bitte mal das Programm, dreht am Rad bis ein Wert erscheint und klickt mal in irgend ein anderes Fenster, meinetwegen den Debugger oder Explorer oder sonstwo hin. Danach wieder zurück auf die Anwendung.

Bei mir steht nun Zählerstand 0 !!!! Soll heißen habe ich vorher z.B. 10 mal vorwärts gescrollt scrollt es jetzt automatisch 10 mal zurück - ohne mein zutun. Wie kann das denn sein?

Ist das nur bei mir so?
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Aug 05, 2008 23:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem hatte ich auch mal. Ich hatte es damals so gelöst, dass immer wenn mehr als 1 Schritt (oder so) gemacht wurde, dass dann die Änderung nicht übernommen wurde. Es wurde quasi der alte Wert auf den neuen Wert überschrieben. Das geht natürlich nicht, wenn man auch nur einmal gescrollt hat. Allerdings muß ich dazu sagen, dass es bei mir zur Zeit nicht mehr so ist. Ich kann dir aber auch nicht sagen, ob es an meiner neuen Maus und deren Treiber liegt (jetzt: Razer Diamondback, vorher: Razer Viper).
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

EPS

BeitragDi, Aug 05, 2008 23:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, umgangen hab ich es auch - nach einem ähnlichen Prinzip.

Ich speichere die Änderung - also MouseZSpeed() - in einer Temp Variablen. Ist die Änderung größer wie 1 - egal welche Richtung ignoriere ich sie. Andernfalls wird die 1 übernommen. Das schließt einen etwaigen verkehrten Schritt zwar nicht aus, aber zumindest bleibt man von 14 Schritten oder so verschont die einem die ganze Map zurückscrollen.

Könnte also sozusagen ein Treiber-Issue sein - wenn man so will.

Danke fürs testen.
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.

FireballFlame

BeitragMi, Aug 06, 2008 2:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist mir erst vor einigen Tagen auch aufgefallen. Die Bewegung auf 1 zu begrenzen, war auch meine erste Idee, aber der Nachteil ist, dass man dann eben nur noch langsam scrollen kann.

Ich hatte versucht, das Problem mit ChristianK's MouseOverWindow-Funktion zu lösen - ich blocke praktisch die Mausrad-Bewegung, wenn die Funktion 0 zurückgibt. Wenn man nun ein anderes Fenster anklickt, hilft das auch.
Wenn man das Programmfenster allerdings mit einer Tastenkombination "deaktiviert" (Windowstaste/Alt+Tab/Windowstaste+Tab) besteht das Problem weiterhin. Mal sehn, ob ich da noch ein Mittel finde.

Wahrscheinlich könnte man auch einfach jedes erste MouseZSpeed()<>0 nach einem MouseZSpeed()=0 "blocken", ohne dass es den Nutzer zusehr stört, hab das aber noch nicht ausprobiert.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Smily

BeitragMi, Aug 06, 2008 8:53
Antworten mit Zitat
Benutzer-Profile anzeigen
tritt der Fehler nur bei der verwendung von MouseZSpeed() auf oder auch bei MouseZ() selbst?
Ansonsten könnten man einfach eine eigene kleine MouseZSpeed()-Funktion schreiben Wink
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Der Eisvogel

BeitragMi, Aug 06, 2008 9:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube so könnte sowas aussehen:
Code: [AUSKLAPPEN]
Global mouse_z_pos

SetBuffer BackBuffer()
Repeat
Cls

Text 0,0,MouseZSpeedEx()
Text 0,10,MouseZSpeed()

Flip
Until KeyDown(1)
End

Function MouseZSpeedEx$() ;--> Das ist die Funktion um die es geht
speed=(MouseZ()-mouse_z_pos)
mouse_z_pos=MouseZ()
Return speed
End Function


MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Smily

BeitragMi, Aug 06, 2008 9:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieso MouseZSpeedEx$?

Die Funktion soll doch keinen String liefern Wink
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

EPS

BeitragMi, Aug 06, 2008 10:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Leider ist MouseZ() davon genau so betroffen - daher funktioniert die Lösung nicht. Zumindest bei mir hat es den gleichen Effekt.
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.

Chrise

BeitragMi, März 18, 2009 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!
Ich weiß, das Thema ist schon alt. Hatte mal das selbe Problem und hab eine Lösung mit MouseZ gefunden. Habe festgestellt, dass MouseZ immer auf 0 gesetzt wird, sobald man in ein Fenster und wieder zurück wechselt. Ich hab mir gedacht, ich stells mal hier rein, vielleicht hilft es ja noch wem.

Einfach im Loop oder vor dem Befehl UpdateMouseZ und danach ganz normal MouseZSpeed2() verwenden Wink

Code: [AUSKLAPPEN]
Global MouseZPos
Function UpdateMouseZ()
   If MouseZ()=0 Then MouseZPos=0
End Function
Function MouseZSpeed2()
   Local MouseZS
   MouseZS=(MouseZ()-MouseZPos)
   MouseZPos=MouseZ()
   Return MouseZS
End Function

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group