Ideas for stairs climbing...

BlitzMax Forums/BlitzMax Programming/Ideas for stairs climbing...

Haramanai(Posted 2006) [#1]
This is my edia :
SuperStrict

Framework BRL.Max2d
Import BRL.GLMax2d

''''''''''''''''''''''''''''THE LEFT STAIRS
Local srot:Float = 45
Local sx:Float = 0
Local sy:Float = 150
Local swidth:Float = 300
Local sheight:Float = 30
''''''''''''''''''''''''' THE FLOOR
Local fx:Float = 200
Local fy:Float = 350
Local fwidth:Float = 200
Local fheight:Float = 30
''''''''''''''''''''''''''''THE LEFT STAIRS
Local srot2:Float = -45
Local sx2:Float = 400
Local sy2:Float = 350
Local swidth2:Float = 300
Local sheight2:Float = 30

''''''''''''''''''''''''''''''The Char
Local x:Float = 0
Local y:Float = 0
Local width:Float = 20
Local height:Float = 20

''''''''''''''''''''' OTHER
Local speed:Float = 5
Local Gravity:Float = 9







Graphics 640 , 480

'''''''''''''''The collision for stairs
SetRotation srot
CollideRect(sx , sy , swidth , sheight , COLLISION_LAYER_1 , COLLISION_LAYER_2)
SetRotation srot2
CollideRect(sx2 , sy2 , swidth2 , sheight2 , COLLISION_LAYER_1 , COLLISION_LAYER_2)
'''''''''''' for floor
SetRotation 0
CollideRect(fx , fy , fwidth , fheight , COLLISION_LAYER_1 , COLLISION_LAYER_2)

While Not KeyHit(KEY_ESCAPE)
	Cls
	ResetCollisions(COLLISION_LAYER_3)
	SetRotation srot
	SetColor 255 , 0 , 0
	DrawRect sx , sy , swidth , sheight
	SetRotation srot2
	DrawRect sx2 , sy2 , swidth2 , sheight2
	SetRotation 0
	SetColor 0 , 255 , 0
	DrawRect fx , fy , fwidth , fheight
	
	SetRotation 0
	DrawRect x , y , width , height
	
	'''''''''''''''The keys
	If KeyDown(KEY_RIGHT)
		Local tx:Float = speed
		If Not CollideRect(x + tx , y , width , height , COLLISION_LAYER_2 , COLLISION_LAYER_1)
			x:+tx
		Else
			For Local i:Int = 1 To 10
				If Not CollideRect(x + tx , y , width , height - i , COLLISION_LAYER_2 , COLLISION_LAYER_1)
					x:+tx
					y:-i
					Exit
				End If
			Next
				
		End If
	End If
	
	If KeyDown(KEY_LEFT)
		Local tx:Float = -speed
		If Not CollideRect(x + tx , y , width , height , COLLISION_LAYER_2 , COLLISION_LAYER_1)
			x:+tx
		Else
			For Local i:Int = 1 To 10
				If Not CollideRect(x + tx , y , width , height - i , COLLISION_LAYER_2 , COLLISION_LAYER_1)
					x:+tx
					y:-i
					Exit
				End If
			Next
				
		End If
	End If
	
	''''''gravity
	
		For Local i:Int = 0 To gravity
			If Not CollideRect(x , y + gravity - i , width , height , COLLISION_LAYER_2 , COLLISION_LAYER_1)
				y:+gravity - i
				Exit
			End If
		Next
	
	Flip
Wend
End


Any beter ideas?