Seite 1 von 3

Mauszeigergeschwindigkeit

Verfasst: 08.04.2005 17:20
von zigapeda
Ich habe ein Spiel. Das Spiel ist mit einem screen. Jetzt ist die maus aber viel zu langsam. Wie kann ich die mausgeschwindigkeit ändern?

Verfasst: 08.04.2005 17:41
von Leo

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)

Verfasst: 08.04.2005 18:02
von Lukas-P
einfach nur mousex()*2

Verfasst: 08.04.2005 18:07
von Ynnus
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.

Verfasst: 08.04.2005 18:09
von zigapeda
@sunny wie würde das gehen?

Verfasst: 08.04.2005 18:26
von 125
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)

Verfasst: 08.04.2005 18:31
von Ynnus
Ok, dann finden wir eben noch weitere Nachteile: ;)

Man kann keine Pixelgroßen Schritte mehr machen. Jede, auch noch so kleine Mausbewegung, ist sofort 2 Pixel groß. Ein Nachteil bei Programmen die präziese Bewegungen verlangen.

Verfasst: 08.04.2005 18:37
von 125
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....

Verfasst: 08.04.2005 21:46
von MLK
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)
weiß aber leider nicht was ich mit

Code: Alles auswählen

aMouseInfo[2] = 2 * aMouseInfo[2]; 
anfangen soll. ist das ein array? habs versucht mit nem array, will nicht klappen..

Verfasst: 08.04.2005 21:58
von Leo
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