Mauszeigergeschwindigkeit
Code: Alles auswählen
#SPI_GETMOUSESPEED = 112
Procedure GetMouseSpeed()
SystemParametersInfo_(#SPI_GETMOUSESPEED, #Null, @MSBuffer, #Null)
ProcedureReturn MSBuffer
EndProcedure
Debug GetMouseSpeed()
[auch wenn MouseDeltaX() nach einem jahr schon ziemlich groß sein wird]
hier mal mit beschleunigung, wobei kleine bewegungen auch klein bleiben.

hier mal mit beschleunigung, wobei kleine bewegungen auch klein bleiben.
Code: Alles auswählen
InitSprite()
InitMouse()
#screenW=1024
#screenH=768
OpenScreen(#screenW,#screenH,32,"fllscrn")
#ACCELERATION=1.5
Repeat
ExamineMouse()
mouseDX.f=MouseDeltaX()
mouseDY.f=MouseDeltaY()
If mouseDX<0 : mouseDX=-Pow(-mouseDX,#ACCELERATION) : Else : mouseDX=Pow(mouseDX,#ACCELERATION) : EndIf
If mouseDY<0 : mouseDY=-Pow(-mouseDY,#ACCELERATION) : Else : mouseDY=Pow(mouseDY,#ACCELERATION) : EndIf
mouseX+mouseDX :If mouseX>#screenW-1 : mouseX=#screenW-1 :EndIf :If mouseX<0 : mouseX=0 :EndIf
mouseY+mouseDY :If mouseY>#screenH-1 : mouseY=#screenH-1 :EndIf :If mouseY<0 : mouseY=0 :EndIf
StartDrawing( ScreenOutput() )
Circle(mouseX,MouseY,2,$ff3311)
StopDrawing()
FlipBuffers()
ClearScreen(0)
Until MouseButton(2)
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@MLK
ist ein array mit 3 feldern. leider weiß ich nich genau, wie groß ein INT in diesem fall ist.
das zweite Feld enthält den Speed.
evtl. sind die anderen beiden Felder Grid und Accelleration.
@Leo
yo das ist dann die Umsetzung. thnx.
> Ich glaube aber, dass bei DX ne andere Maus verwendet wird ...
und das ist wohl der knackpunkt. kann da jemand weiterhelfen?
ich hab mir nämlich zufällig grad vor ein paar tagen dieselbe frage gestellt.
@#NULL
wieso Pow()?
also, ich würde nen einfachen faktor vorziehen, zumal das Pow() irre rechenzeit braucht.
abgesehen davon ist die lösung durchaus zwar brauchbar, aber das problem bleibt,
dass die rückgabe von MouseDelta wohl eigentlich Integer ist,
und wir dann mit einem faktor eben immer größere schritte als 1 bekommen.
es wäre halt wünschenswert, durchaus 1pix-schritte bekommen zu können,
wenn die maus synchron zur framerate bewegt wird.
Code: Alles auswählen
int aMouseInfo[3];
Code: Alles auswählen
aMouseInfo[2] = 2 * aMouseInfo[2];
evtl. sind die anderen beiden Felder Grid und Accelleration.
@Leo
yo das ist dann die Umsetzung. thnx.
> Ich glaube aber, dass bei DX ne andere Maus verwendet wird ...
und das ist wohl der knackpunkt. kann da jemand weiterhelfen?
ich hab mir nämlich zufällig grad vor ein paar tagen dieselbe frage gestellt.
@#NULL
wieso Pow()?
also, ich würde nen einfachen faktor vorziehen, zumal das Pow() irre rechenzeit braucht.
abgesehen davon ist die lösung durchaus zwar brauchbar, aber das problem bleibt,
dass die rückgabe von MouseDelta wohl eigentlich Integer ist,
und wir dann mit einem faktor eben immer größere schritte als 1 bekommen.
es wäre halt wünschenswert, durchaus 1pix-schritte bekommen zu können,
wenn die maus synchron zur framerate bewegt wird.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
wieso einfach?? wenn es auch komplieziert geht ....
also leute dies ist eine naja sagen wir mal eine sehr genaue aber trotzdem schnelle maus ...
dort wie die -3 und die 3 steht kannste das so einstellen wie du es willst.
und genau ist die maus ach noch wie die alte ^^
MFG
also leute dies ist eine naja sagen wir mal eine sehr genaue aber trotzdem schnelle maus ...
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
und genau ist die maus ach noch wie die alte ^^
MFG
die maus kann man sogar noch verbessern!
jetzt ist das ja so: das wenn du mit der maus langsam anfärst und von 2 aud 3 wechselst dann macht er einen riesen geschwindigkeitssprung... so passiert das nicht:
jetzt ist das ja so: das wenn du mit der maus langsam anfärst und von 2 aud 3 wechselst dann macht er einen riesen geschwindigkeitssprung... so passiert das nicht:
Code: Alles auswählen
Exminemouse()
MouseLocate(mouseX()+MouseDeltaX()*MouseDeltaX(), mouseY()+MouseDeltaY()*MouseDeltaY())
naja du musst wissen wie deine maus sein soll also so finde ich die cool!
MFG brügge
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@Brügge
kannst du mir mal verkasematuckeln, was der schwachsinn soll?
also, du nimmst die aktuelle Koordinaten der Maus,
dann die differenz zu den letzten Koordinaten,
die liest du auch noch 2x aus, also, 2x Function-Call...
*koppschüttel*
sorry, aber das entbehrt jeder logik. warauf wolltest du denn hinaus?
kannst du mir mal verkasematuckeln, was der schwachsinn soll?
also, du nimmst die aktuelle Koordinaten der Maus,
dann die differenz zu den letzten Koordinaten,
die liest du auch noch 2x aus, also, 2x Function-Call...
*koppschüttel*
sorry, aber das entbehrt jeder logik. warauf wolltest du denn hinaus?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
@KG
ja, der Pow()-aufruf ist etwas übertrieben.
aber dass die bewegungen immer gößer als 1 pixel wären stimmt nicht.
....hier mal vier modi (mit taste 1 bis 4 umschalten)
ja, der Pow()-aufruf ist etwas übertrieben.
aber dass die bewegungen immer gößer als 1 pixel wären stimmt nicht.
Code: Alles auswählen
deltaX.f=1
n=Pow(deltaX,1.9)
Debug n ; gibt 1 aus
....hier mal vier modi (mit taste 1 bis 4 umschalten)
Code: Alles auswählen
InitSprite():InitKeyboard()
InitMouse()
#screenW=1024
#screenH=768
OpenScreen(#screenW,#screenH,32,"fllscrn")
#ACC1=1.3
#ACC2=1.2
#ACC3=0.15
mode=1
Repeat
ExamineKeyboard()
ExamineMouse()
If KeyboardReleased(#PB_Key_1) : mode=1 : EndIf
If KeyboardReleased(#PB_Key_2) : mode=2 : EndIf
If KeyboardReleased(#PB_Key_3) : mode=3 : EndIf
If KeyboardReleased(#PB_Key_4) : mode=4 : EndIf
Select mode
Case 1
mouseX=MouseX()
mouseY=MouseY()
s$="normal"
Case 2
mouseDX.f=MouseDeltaX()*#ACC1
mouseDY.f=MouseDeltaY()*#ACC1
mouseX+mouseDX :If mouseX>#screenW-1 : mouseX=#screenW-1 :EndIf :If mouseX<0 : mouseX=0 :EndIf
mouseY+mouseDY :If mouseY>#screenH-1 : mouseY=#screenH-1 :EndIf :If mouseY<0 : mouseY=0 :EndIf
s$="faktor"
Case 3
mouseDX.f=MouseDeltaX()
mouseDY.f=MouseDeltaY()
If mouseDX<0 : mouseDX=-Pow(-mouseDX,#ACC2) : Else : mouseDX=Pow(mouseDX,#ACC2) : EndIf
If mouseDY<0 : mouseDY=-Pow(-mouseDY,#ACC2) : Else : mouseDY=Pow(mouseDY,#ACC2) : EndIf
mouseX+mouseDX :If mouseX>#screenW-1 : mouseX=#screenW-1 :EndIf :If mouseX<0 : mouseX=0 :EndIf
mouseY+mouseDY :If mouseY>#screenH-1 : mouseY=#screenH-1 :EndIf :If mouseY<0 : mouseY=0 :EndIf
s$="Pow()"
Case 4
mouseDX.f=MouseDeltaX()
mouseDY.f=MouseDeltaY()
If mouseDX<-4 : mouseDX=-mouseDX*mouseDX*#ACC3 : ElseIf mouseDX>4 : mouseDX=mouseDX*mouseDX*#ACC3 : EndIf
If mouseDY<-4 : mouseDY=-mouseDY*mouseDY*#ACC3 : ElseIf mouseDY>4 : mouseDY=mouseDY*mouseDY*#ACC3 : EndIf
mouseX+mouseDX :If mouseX>#screenW-1 : mouseX=#screenW-1 :EndIf :If mouseX<0 : mouseX=0 :EndIf
mouseY+mouseDY :If mouseY>#screenH-1 : mouseY=#screenH-1 :EndIf :If mouseY<0 : mouseY=0 :EndIf
s$="exponential ohne Pow() - mit schranke"
EndSelect
StartDrawing( ScreenOutput() )
Circle(mouseX,MouseY,2,$ff3311)
DrawText(100,100,s$, $aaaaaa,$0)
StopDrawing()
FlipBuffers()
ClearScreen(0)
Until MouseButton(2)