Seite 3 von 3

Verfasst: 04.08.2006 12:45
von Brügge
ohh sorry habe einen kleinen fehler gemacht ...


also so muss das :


Code: Alles auswählen

  ExamineMouse()

  If MouseDeltaX() < -3 Or MouseDeltaX() > 3 
    MouseLocate(MouseX()+ MouseDeltaX()*2 ,MouseY()) 
  EndIf 
  If MouseDeltaY() < -3 Or MouseDeltaY() > 3 
    MouseLocate(MouseX(), MouseY()+MouseDeltaY()*2)   
  EndIf 


Verfasst: 04.08.2006 13:01
von Kaeru Gaman
so, ich bin jetzt mal in mich gegangen, und hab drüber meditiert.

ok, es ist ein interessanter gedanke, die aktuelle position um eine erhöhte Delta zu verändern.

ABER!
mit der 37 funktionsaufrufen schießt du dir in die kniescheibe,
zumal du im ersten If bereits ein Relocate ausführst.

außerdem würde ich bei den Ifs nicht <-3 und >3 nehmen, was ist mit kleineren Deltas?
ich finde es nämlich widersinnig, ein Delta von 3 garnicht zu beachten,
dass es effektiv ein 3 bleibt, aber dann aus einem 4 gleich ein 8 zu machen.

um dein Verfahren mal sauber umzusetzen:

Code: Alles auswählen

  ExamineMouse() 

  MX = MouseX()
  MY = MouseY()
  MDX = MouseDeltaX()
  MDY = MouseDeltaY()

  If MDX  <> 0 
    MX + MDX*2
  EndIf 

  If MDY  <> 0 
    MY + MDY*2
  EndIf 

  MouseLocate(MX, MY)    

damit sind abfrage und zuweisung sauber zeitlich getrennt und es findet nur eine einzige zuweisung statt.
die gesamtzahl der funktionsaufrufe habe ich auch von 12 auf 5 verringert.

EDIT
und ich seh grad, die Ifs kann man sich auch sparen....

Code: Alles auswählen

  ExamineMouse() 

  MX = MouseX() : MY = MouseY()
  MDX = MouseDeltaX() : MDY = MouseDeltaY()
  MX + MDX*2 : MY + MDY*2
  MouseLocate(MX, MY)
EDIT2

aber dir ist schon klar, dass der einzige vorteil deines vorschlags ist,
dass du dir eine testung des bildschirmrandes sparst?

ob das wirklich performanter ist
a) MouseLocate() und MouseX() und MouseY() aufzurufen
anstatt
b) die Koordinaten zu prüfen
sei noch mal dahingestellt.

Verfasst: 04.08.2006 14:00
von Brügge
ähmm also das was du da geschrieben hast damit kannst du aber nicht den genauen pixel bekommen den du haben willst. deshalb das mit <> 3
das ist für sehr genaue spiele besser ... wenn du zB einem 3d spiel willst du den winkel per maus einstellen dann kannst du deine art vergessen, weil du den exakten punkt nicht erreichen wirst: du kannst nur den punkt davor oder dahinter ...

Verfasst: 04.08.2006 14:30
von #NULL
also wenn man mit MouseDeltaX() arbeitet würde ich lieber ganz auf MouseX() verzichten und die koordinaten selbst verwalten. beides zusammen ist unsinn.
und die detail-bewegungen kommen in deinen code (Kaeru Gaman) auch nicht so gut.
bisher gefällt mir die lösung mit der exponetialen beschleunigung (ohne FuncCall) am besten

Verfasst: 04.08.2006 16:16
von Andreas

Code: Alles auswählen

; MouseSpeed = Beziehung zwischen Mouse und Cursorbewegung.
; Mögliche Einstellungen sind 0/1/2.
; Dieser Wert wird auf folgende Weise ausgewertet:
; Bei 0 wird Cursorbewegung nicht beschleunigt.
; Bei 1 wird die Cursorgeschwindigkeit verdoppelt,
; wenn der Wert in MouseThreshold1 überschritten wurde.
; Bei 2 wird bei überschrittenem Wert in MouseThreshold1 die Cursorgeschwindigkeit verdoppelt
; und bei überschrittenem Wert in MouseThreshold2 wird sie vervierfacht.
; 
; MouseThreshold1 = Anzahl der Pixel, über die die Maus zwischen Mausunterbrechungen bewegt werden kann,
; bevor MouseSpeed aktiviert wird. Ggf. doppelte Cursorgeschwindigkeit.
; Standardeinstellung ist 5.
; 
; MouseThreshold2 = Anzahl der Pixel, über die die Maus zwischen Mausunterbrechungen bewegt werden kann,
; bevor MouseSpeed aktiviert wird. Ggf. vierfache Cursorgeschwindigkeit.
; Standardeinstellung ist 5.


Dim OldMouse.l(2)
Dim NewMouse.l(2)

;alten Mousespeed sichern
SystemParametersInfo_(#SPI_GETMOUSE,0,@OldMouse(0),0)

NewMouse(0) = 4 ; Threshold1
NewMouse(1) = 6 ; Threshold2
NewMouse(2) = 2 ; Speed

SystemParametersInfo_(#SPI_SETMOUSE,0,@NewMouse(0),#SPIF_SENDWININICHANGE|#SPIF_UPDATEINIFILE)
;
;Programmausführung
;
;zurücksetzen
SystemParametersInfo_(#SPI_SETMOUSE,0,@OldMouse(0),#SPIF_SENDWININICHANGE|#SPIF_UPDATEINIFILE)

Verfasst: 28.02.2007 16:09
von Scarabol
@Andreas
Ist zwar schon was her aber noch ein kleiner Tip zu deinem Code.
Du kannst

Code: Alles auswählen

Dim OldMouse.l(2)
ersetzen durch

Code: Alles auswählen

OldMouse.l
hier brauchst du kein Array.

die Infos kann man dann in die Variable schreiben

Code: Alles auswählen

SystemParametersInfo_(#SPI_GETMOUSE,0,@OldMouse,0)
Gruß
Scarabol