How do I slow down mouse movement in-game?

Blitz3D Forums/Blitz3D Beginners Area/How do I slow down mouse movement in-game?

Hi,

I am currently working on a spaceshooter game where the player
is controlled by moving the mouse around.

Currently, I simply control the player like this.

Function MovePlayer()

Player\x = MouseX()
Player\y = MouseY()

End Function


But when I move the player he just zips all over the screen do to
my mouse speed. How can I slow down the speed of the mouse
in-game, without messing up the speed of my mouse out of game?

Do I have to use MoveMouse() and the MouseSpeed commands?
(And perhaps some tricky math too?)

Or is there an easier way to do this?


The Mighty WERDNA(Lord Of Darkness)

Wow, I can actually help someone else for a change! It's easy, you just put /2 after the mouseposition and mouseheight variables. That'll make it go half speed. You can make it anything. You could make it 1/40th normal speed, just write mouseposition/40. The variable must be a float though, since you're actually dividing a pixel into 40, or however many pieces. 40 is about what I used for when my characters were flying off screen at mach 4.

http://files.filefront.com/MoveCharacter20081009zip/;12028185;/fileinfo.html

It's in this code somewhere. I'm not sure where right now cause I'm not at a computer where I can open it. It's a short file though, you should be able to find it pretty easily. Good luck, hope this helps!

Wow!

Thanks man!

This should work perfectly ^_^

I'll check it out later and tell you how it worked.


The Mighty WERDNA(Lord Of Darkness)


Here is the MouseXSpeed and MouseYSpeed example.

Graphics 640,480 

SetBuffer BackBuffer() 

x=320 
y=240 

; infinite mouse movement 

Repeat 
Cls 

xs=MouseXSpeed()/2 ; see how far the mouse has been moved 
ys=MouseYSpeed()/2 ; Just change the /2 for slower or faster mouse movement
MoveMouse 320,240 ;put the mouse back in the middle of the screen 

x=x+xs ;adjust mouse co-ords 
y=y+ys 

If x>GraphicsWidth()-1 Then x=x-GraphicsWidth() ;wrap screen 
If x<0 Then x=x+GraphicsWidth() 
If y<0 Then y=y+GraphicsHeight() 
If y>GraphicsHeight()-1 Then y=y-GraphicsHeight() 

Text x,y,"X",True,True 

Flip 

Until KeyHit(1) 

End 


MouseXSpeed() and MouseYSpeed() is really the way to go, as that identifies the change of position the mousecursor per call.

Also, you may wish to re-position the cursor (MoveMouse) each loop too.

If you have any frame-limiting or timing code, you can also include some delta code to get a proportional mousemovement per second or per tenth-of-second etc. whichever gives the omst 'playable' results.