Seite 2 von 3

Verfasst: 08.04.2005 22:10
von Rubiko
ich glaube ja, aber am ende vom programm muss es natürlich wieder aufs minimum gezogen werden

Verfasst: 08.04.2005 22:38
von zigapeda
wenn ich leos code benutze kann ich die geschwindigkeit ändern aber wie kann ich sie rausfinden bzw. am ende des Programms wieder zurücksetzen?

Verfasst: 09.04.2005 10:41
von Leo

Code: Alles auswählen

#SPI_GETMOUSESPEED = 112
Procedure GetMouseSpeed()
    SystemParametersInfo_(#SPI_GETMOUSESPEED, #Null, @MSBuffer, #Null)
    ProcedureReturn MSBuffer
EndProcedure

Debug GetMouseSpeed()
P.S.: Ich glaube aber, dass bei DX ne andere Maus verwendet wird ... (@Stefan Moubius?)

Verfasst: 09.04.2005 11:25
von zigapeda
Wie du vermutet hast es hat keinen Unterschied ob ich bei Dx den MouseSpeed auf 1 oder 20 setzte (mit deiner Procedure).

Verfasst: 03.08.2006 20:28
von #NULL
[auch wenn MouseDeltaX() nach einem jahr schon ziemlich groß sein wird] <)

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)

Verfasst: 03.08.2006 20:50
von Kaeru Gaman
@MLK

Code: Alles auswählen

int aMouseInfo[3];
ist ein array mit 3 feldern. leider weiß ich nich genau, wie groß ein INT in diesem fall ist.

Code: Alles auswählen

aMouseInfo[2] = 2 * aMouseInfo[2]; 
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.

Verfasst: 03.08.2006 21:08
von Brügge
wieso einfach?? wenn es auch komplieziert geht ....

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

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

Verfasst: 03.08.2006 21:14
von Brügge
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:

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

Verfasst: 03.08.2006 21:37
von Kaeru Gaman
@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?

Verfasst: 03.08.2006 22:57
von #NULL
@KG
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)