Mauszeigergeschwindigkeit
Mauszeigergeschwindigkeit
Ich habe ein Spiel. Das Spiel ist mit einem screen. Jetzt ist die maus aber viel zu langsam. Wie kann ich die mausgeschwindigkeit ändern?
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping

Code: Alles auswählen
InitSprite():InitMouse():InitKeyboard()
OpenScreen(800,600,32,"Hallo Welt -_-")
Repeat
ExamineMouse()
ExamineKeyboard()
ClearScreen(0,0,0)
If MouseDeltaX() > 0 Or MouseDeltaX() < 0
mousePosX + MouseDeltaX() * 2 ;Hier Speed einstellen
EndIf
If MouseDeltaY() > 0 Or MouseDeltaY() < 0
mousePosY + MouseDeltaY() * 2 ;Und hier natürlich auch ;)
EndIf
StartDrawing(ScreenOutput())
Box(mousePosX,mousePosY,5,5,RGB(255,0,0))
StopDrawing()
FlipBuffers()
Until MouseButton(1) Or KeyboardPushed(1)
Wobei dann die Mausposition nicht mehr der exakten Position des Betriebssystemzeigers entspricht. Demnach wird bei Überschreitung der Bildschirmgrenze der Mauszeiger nicht stopp machen und halten denn dein Mauszeiger mag drüber liegen, der OS-Interne Zeiger nicht. In der Rechnung mit *2 sieht es etwa so aus:
Bildschirmauflösung von 1024 pixel Breite
Betriebssystem interne Maus ist bei 800 Pixeln, also noch voll im Bild
Deine Spielmaus wird aber wegen dem x2 bei 1600 Pixeln dargestellt, also außerhalb des Zeichenbereichs.
Das ist nur eine kleine Sache die bedacht werden sollte. Ich würde vielleicht die reale Mausgeschwindigkeit anheben (und nachher wieder zurücksetzen), wobei dies sicherlich mit mehr Aufwand verbunden wäre.
Bildschirmauflösung von 1024 pixel Breite
Betriebssystem interne Maus ist bei 800 Pixeln, also noch voll im Bild
Deine Spielmaus wird aber wegen dem x2 bei 1600 Pixeln dargestellt, also außerhalb des Zeichenbereichs.
Das ist nur eine kleine Sache die bedacht werden sollte. Ich würde vielleicht die reale Mausgeschwindigkeit anheben (und nachher wieder zurücksetzen), wobei dies sicherlich mit mehr Aufwand verbunden wäre.
Hier so das der MouseZeiger im Feld bleibt und nicht hinter den Bildschirmrand verschwindet:
Code: Alles auswählen
InitSprite():InitMouse():InitKeyboard()
OpenScreen(800,600,32,"Hallo Welt -_-")
Repeat
ExamineMouse()
ExamineKeyboard()
ClearScreen(0,0,0)
If MouseDeltaX() > 0 Or MouseDeltaX() < 0
If mousePosX + MouseDeltaX() * 2 < 800 And mousePosx + MouseDeltaX() * 2 >1
mousePosX + MouseDeltaX() * 2
EndIf
EndIf
If MouseDeltaY() > 0 Or MouseDeltaY() < 0
If mousePosy + MouseDeltaY() * 2 < 600 And mousePosy + MouseDeltaY() * 2 >1
mousePosy + MouseDeltay() * 2
EndIf
EndIf
StartDrawing(ScreenOutput())
Box(mousePosX,mousePosY,5,5,RGB(255,0,0))
StopDrawing()
FlipBuffers()
Until MouseButton(1) Or KeyboardPushed(1)
hab gerade mal bissle MSDN geguckt und das hier gefunden:
HKEY_CURRENT_USER\Control Panel\Mouse\MouseSpeed
weis nur net ob man da was mit anfangen kann werd mir das mal anschauen..
//Edit in HKEY_CURRENT_USER\Control Panel\Mouse\MouseSensitivity
steht der Speed allerdings passiert wenn man ihn in ReGerdit hochschraubt nichts man muss das irgendwie aktualisiern können...
*weiterforsch*
//Edit2:
http://msdn.microsoft.com/library/en-us ... eclass.asp versteh da nur bahnhof mit thersehold 1 und 2^^
//Edit3:
Habs aufgegeben das verstehn zu wollen solls wer anders machen ist mir zu Komplex hab bisher soviel verstanden das wenn Thereshold 1 gecrossed wird die maus um soundsoviel verschnellert wird aber sonst kapier ich null....
HKEY_CURRENT_USER\Control Panel\Mouse\MouseSpeed
weis nur net ob man da was mit anfangen kann werd mir das mal anschauen..
//Edit in HKEY_CURRENT_USER\Control Panel\Mouse\MouseSensitivity
steht der Speed allerdings passiert wenn man ihn in ReGerdit hochschraubt nichts man muss das irgendwie aktualisiern können...
*weiterforsch*
//Edit2:
http://msdn.microsoft.com/library/en-us ... eclass.asp versteh da nur bahnhof mit thersehold 1 und 2^^
//Edit3:
Habs aufgegeben das verstehn zu wollen solls wer anders machen ist mir zu Komplex hab bisher soviel verstanden das wenn Thereshold 1 gecrossed wird die maus um soundsoviel verschnellert wird aber sonst kapier ich null....
MS hat geschrieben: This next example uses SystemParametersInfo to double the mouse speed and update the MouseSpeed value in the WIN.INI file.
TCHAR tchBuffer[BUFFER]; // buffer for expanded string
int nSize; // size of string
int aMouseInfo[3]; // array for mouse information
// Get the current mouse speed.
SystemParametersInfo(SPI_GETMOUSE, // get mouse information
NULL, // not used
&aMouseInfo, // holds mouse information
NULL); // not used
// Double it.
aMouseInfo[2] = 2 * aMouseInfo[2];
// Change the mouse speed to the new value and update WIN.INI.
SystemParametersInfo(SPI_SETMOUSE, // set mouse information
NULL, // not used
aMouseInfo, // mouse information
SPIF_UPDATEINIFILE); // update win.ini
so grob würde es dann so aussehen:
Code: Alles auswählen
;mouspeed einholen
SystemParametersInfo_(#SPI_GETMOUSE, #Null, @aMouseInfo, #Null)
;neuen speed angeben (fehlt)
;und neuen setzen
SystemParametersInfo_(#SPI_SETMOUSE, #Null, aMouseInfo, #SPIF_UPDATEINIFILE)
Code: Alles auswählen
aMouseInfo[2] = 2 * aMouseInfo[2];
Wird hier sowas gesucht?
Code: Alles auswählen
#SPI_SETMOUSESPEED = 113
#SPIF_SENDCHANGE = 2
Procedure SetMouseSpeed(Speed)
ProcedureReturn SystemParametersInfo_(#SPI_SETMOUSESPEED, #Null, Speed, #SPIF_SENDCHANGE)
EndProcedure
SetMouseSpeed(20) ;10 Default, 1 Minimum, 20 Maximum