Here a small example of how to make spikes for platform games.
Code below :
Import mojo Class spike Field x:Int Field y:Int Field inc:Float Field offset:Float Field height:Int=64 Field width:Int=8 Field state:String="out" Field laststate:String="" Field starttime:Int Field time:Int Method New(_x,_y,_starttime) x = _x y = _y state="start" starttime=Millisecs()+_starttime End Method Method draw() DrawPoly([Float(x+width/2),y-offset, x+width,y+height-offset, x,y+height-offset]) End Method Method collide:Bool(x1,y1,w1,h1) If rectsoverlap(x1,y1,w1,h1,x,y-offset,width,height) = True Then Return True Return False End Method Method update() Select state Case "start" If starttime < Millisecs() laststate="start" state="out" End If Case "out" For Local i=0 Until 3 offset+=1 If offset >= height Then state="wait" laststate="out" time=Millisecs() Exit End If Next Case "wait" If time+2000 < Millisecs() Select laststate Case "out" state="in" laststate = "wait" Case "in" state="out" laststate="wait" End Select End If Case "in" For Local i=0 Until 3 offset-=1 If offset <= 0 Then state="wait" laststate="in" time=Millisecs() Exit End If Next End Select End Method End Class Global spikes:List<spike> = New List<spike> Global coll:Bool=False Class MyGame Extends App Method OnCreate() SetUpdateRate(60) For Local x=2 Until 18 If Rnd(1,10) < 3 Then spikes.AddLast(New spike(x*32,10*32,Rnd(500,2000))) Next End Method Method OnUpdate() coll = False For Local i:=Eachin spikes i.update If i.collide(MouseX(),MouseY(),32,32) = True Then coll = True Next End Method Method OnRender() Cls 0,0,0 SetColor 255,255,255 DrawText "Move the mouse in the spikes for collision.",0,0 If coll=True DrawText "Collide",0,16 End If For Local i:=Eachin spikes i.draw Next DrawRect 0,10*32,20*32,5*32 SetColor 255,0,0 DrawRect MouseX(),MouseY(),32,32 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.