Here is code that shows how to make a player move towards the mouse. Not directly but it will slowly turn towards the destination angle. It checks which direction is closest. This method is nice for homing missiles and such and space ship thrust movement.
I was able to shorten the code for the turning. Now I only have one loop to count up to the closest turn.
I hope to create a space shooter with some smart ai and turrets this morning and post it online. Hope I can get it working.
Code below :
Import mojo
Class player
Field angle:Int
Field x:Float = 100
Field y:Float = 100
Field mx:Float = 2 'movement speed x
Field my:Float = 2 'movement speed y
Method update()
' here we move the player with the current angle
x+=Cos(angle)*mx
y+=Sin(angle)*my
'get the real angle between the mouse and player
Local destinationangle = getangle(MouseX(),MouseY(),x,y)
' cnt1 is used to see which direction is closer towards the destination angle
Local cnt1 = 0
' put the angle value in a1
Local a1 = angle
' we exit the loop if the a1 value is the destination angle
While a1<>destinationangle
'increase the a1 value
a1+=1
' valid angles range from -180 to 180
If a1>180 Then a1=-180
'increase the cnt1 counter with one
cnt1+=1
Wend
' if going left is shorter
If cnt1<180 Then angle+=3 Else angle-=3
' Keep the angle in the valid angle range
If angle>180 Then angle=-180
If angle<-180 Then angle=180
End Method
Method draw()
SetColor 255,255,255
DrawOval x,y,10,10
End Method
End Class
Global p:player = New player
Class MyGame Extends App
Method OnCreate()
SetUpdateRate(60)
End Method
Method OnUpdate()
p.update
End Method
Method OnRender()
Cls 0,0,0
SetColor 255,255,255
p.draw
End Method
End Class
Function getangle:Int(x1:Int,y1:Int,x2:Int,y2:Int)
Return ATan2(y1-y2, x1-x2)
End Function
Function Main()
New MyGame()
End Function
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.