How do I slow down mouse movement in-game?

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

WERDNA(Posted 2008) [#1]
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)


fox95871(Posted 2008) [#2]
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://h1.ripway.com/fox95871/index.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!


WERDNA(Posted 2008) [#3]
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)



Mortiis(Posted 2008) [#4]
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 



_PJ_(Posted 2008) [#5]
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.