move my ship with the mouse

BlitzMax Forums/BlitzMax Beginners Area/move my ship with the mouse

hub(Posted 2006) [#1]
Hi !
in my game i used a poor code to move my ship with the mouse !!! Could you help me to transform this to an interesting very cool super pro movement code ! ;-)
Thanks !

see also : http://www.blitzbasic.com/Community/posts.php?topic=57242


Graphics 800,600

HideMouse()

MoveMouse GraphicsWidth()/2, GraphicsHeight() / 2

OldMouseX = MouseX()
OldMouseY = MouseY()
PosX = MouseX()
PosY = MouseY()


While Not KeyDown (KEy_ESCAPE)
								
	DeltaX = MouseX() - OldMouseX
	DeltaY = MouseY() - OldMouseY
	
	If DeltaX <> 0 Then
		
		If (DeltaX > 0 And PosX < GraphicsWidth() - 20) Then PosX = PosX + DeltaX
		If (DeltaX < 0 And PosX > 20)                   Then PosX = PosX + DeltaX
	End If
	
	If DeltaY <> 0 Then
	
		If (DeltaY > 0 And PosY < GraphicsHeight() - 20)       Then PosY = PosY + DeltaY
		If (DeltaY < 0 And PosY > 20) Then PosY = PosY + DeltaY
	
	End If
		
	OldMouseX = MouseX()
	OldMouseY = MouseY()
	
Cls
DrawOval PosX, PosY, 50,50
Flip

Wend

ShowMouse()



semar(Posted 2006) [#2]
Have a look to the 'Rockout' code in the Bmax examples.

The ship is mouse controlled, and has a smoothed movement. Perhaps it suits your needs.

Sergio.


hub(Posted 2006) [#3]
Thanks semar !

Could have some reactions about this method ?

Updated code to test :
Graphics 800,600

Const cte_div = 5

HideMouse()

MoveMouse GraphicsWidth()/2, GraphicsHeight() / 2

PosX = MouseX()
PosY = MouseY()


While Not KeyDown (KEy_ESCAPE)
								
            xdist# = MouseX() - Posx
            ydist# = MouseY() - Posy
            xs = xdist / cte_div
            ys = ydist / cte_div
            Posx = Posx + xs
            Posy = Posy + ys
	
Cls
SetColor 255,255,255
DrawOval PosX-25, PosY-25, 50,50
SetColor  255,0,0
DrawOval MouseX()-3, MouseY()-3,6,6

Flip

Wend

ShowMouse()



hub(Posted 2006) [#4]
i've udapted my game.
is this code is adaptable for a keyboard or joypad or should i search another method to have the same effect ?


hub(Posted 2006) [#5]
answer seems to be yes :

keyboard
Graphics 800,600

Const cte_div = 5

destx = GraphicsWidth()/2
desty = GraphicsHeight() / 2

PosX = destx
PosY = desty

While Not KeyDown (KEy_ESCAPE)
								
            xdist# = destx - Posx
            ydist# = desty - Posy
            xs = xdist / cte_div
            ys = ydist / cte_div
            Posx = Posx + xs
            Posy = Posy + ys

			If KeyDown (KEy_UP) Then desty = desty - 3
			If KeyDown (KEy_DOWN) Then desty = desty + 3
			If KeyDown (KEy_LEFT) Then destx = destx - 3
			If KeyDown (KEy_RIGHT) Then destx = destx + 3
	
Cls
SetColor 255,255,255
DrawOval PosX-25, PosY-25, 50,50
SetColor  255,0,0
DrawOval destx-3, desty-3,6,6

Flip

Wend