Example of how to find collision with sloped tiles. This may not be the best way to do it but I can not find good/easy/understandable descriptions on how to do it differently.
Import mojo
Global block1x:Int = 100
Global block1y:Int = 100
Global blockwidth:Int = 32
Global blockheight:Int = 32
Global block2x:Int = 320+100
Global block2y:Int = 100
Class MyGame Extends App
Method OnCreate()
SetUpdateRate(60)
End Method
Method OnUpdate()
End Method
Method OnRender()
Cls 0,0,0
SetColor 255,255,255
DrawText "Move mouse inside sloped images to see collision.",10,10
DrawText "Slopeleft",block1x,block1y-25
drawslopeleft(block1x,block1y)
DrawText "Sloperight",block2x,block2y-25
drawsloperight(block2x,block2y)
'
DrawRect MouseX(),MouseY(),32,32
'
If slopeleftcollision(MouseX(),MouseY(),block1x,block1y) = True
DrawText "Left slope collision",10,50
End If
If sloperightcollision(MouseX(),MouseY(),block2x,block2y) = True
DrawText "Right slope collision",10,50
End If
End Method
End Class
Function sloperightcollision:Bool(x1:Int,y1:Int,x2:Int,y2:Int)
Local y3=y2
For Local x3=x2 Until x2+blockwidth
If rectsoverlap(x1,y1,blockwidth,blockheight,x3,y3,1,1) = True Then Return True
y3+=1
Next
Return False
End Function
Function slopeleftcollision:Bool(x1:Int,y1:Int,x2:Int,y2:Int)
Local y3=blockheight+y2
For Local x3=x2 Until x2+blockwidth
If rectsoverlap(x1,y1,blockwidth,blockheight,x3,y3,1,1) = True Then Return True
y3-=1
Next
Return False
End Function
Function drawslopeleft:Void(x:Int,y:Int)
DrawPoly([Float(x),y+blockheight,x+blockwidth,y+blockheight,x+blockwidth,y])
End Function
Function drawsloperight:Void(x:Int,y:Int)
DrawPoly([Float(x),y,x,y+blockheight,x+blockwidth,y+blockheight,x,y])
End Function
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.