In some games there are swinging chains with balls that the player must avoid. Here a example of it. Mouse the mouse to collide with the swings.
Code below :
Import mojo Class swing Field x:Int Field y:Int Field height:Int=64 Field angle:Float=0 Field inc:Float=0 Field direction:Int=1 Method New(_x,_y) x = _x y = _y End Method Method drawswing() For Local i=0 Until height Step 8 Local s=8 If i>height-16 s=32 End If DrawOval x+Cos(angle)*i-s/2,y+Sin(angle)*i-s/2,s,s Next End Method Method updateswing() If direction = 1 Then inc+=0.1 If direction = -1 Then inc-=0.1 angle+=inc If angle > 90 And direction = 1 Then direction = -1 If angle < 90 And direction = -1 Then direction = 1 End Method Method rectswingcollision:Bool(x1:Int,y1:Int,w1:Int,h1:Int) For Local i=0 Until height Step 8 Local s=8 If i>height-16 s=32 End If If rectsoverlap(x1,y1,w1,h1,x+Cos(angle)*i-s/2,y+Sin(angle)*i-s/2,s,s) = True Then Return True Next Return False End Method End Class Global swings:List<swing> = New List<swing> Global coll:Bool=False Class MyGame Extends App Method OnCreate() SetUpdateRate(60) swings.AddLast(New swing(100,100)) swings.AddLast(New swing(320,100)) End Method Method OnUpdate() coll = False For Local i:=Eachin swings i.updateswing If i.rectswingcollision(MouseX(),MouseY(),32,32) = True Then coll = True Next End Method Method OnRender() Cls 0,0,0 SetColor 255,255,255 DrawText "Game part - The swing. - Move the mouse inside the swing to collide.",0,0 If coll = True Then DrawText "Collision",0,16 End If DrawRect MouseX(),MouseY(),32,32 For Local i:=Eachin swings i.drawswing Next End Method End Class Function rectsoverlap:Bool(x1:Int, y1:Int, w1:Int, h1:Int, x2:Int, y2:Int, w2:Int, h2:Int) If x1 >= (x2 + w2) Or (x1 + w1) <= x2 Then Return False If y1 >= (y2 + h2) Or (y1 + h1) <= y2 Then Return False Return True End Function Function Main() New MyGame() End Function
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.