Hi! Thanks for all the replies. I've made some modification from ideas I got from this thread and I have made some progress.
The code works but not flawlessly. I get stuck in between tiles when jumpin ie. i land in the middle of them.
I'm so close to getting this sorted but need a bit more help from you guys.
I've gone through the code and commented it as much as I could so that people can understand what I'm trying to do. Hopefully this will end up as a little template for people to figure out how to make platformers from.
More help is ofcourse appreciated. :)
SuperStrict
Graphics 800 , 600
Global Tiles:TImage = LoadAnimImage("ice_floortiles.png",32,32,0,8)
Global Player:TImage = LoadImage("player.png")
Const MAPWIDTH:Int = 800/32
Const MAPHEIGHT:Int = 600/32
Global Map:Int[MAPWIDTH , MAPHEIGHT]
Global PlayerX:Float 'The players X Location On Screen
Global PlayerY:Float ' The Players Y Location On Screen
Global CheckPlayerPosition:Int = 0 ' A Flag to check the Players Current position.
Global Direction:Int = -1' The Direction the Player is travelling in
Global Jump:Int = 0 ' Are we Jumping
Const Gravity:Float = 0.2 ' Amount of Gravity to apply to JumpHeight
Global JumpHeight:Float = 5.3' The height The player Jumps in pixels
Global CanJump:Int = 1 ' Whether we can Jump. If we're already jumping we can't jump again ie. double jump.
Global Falling:Int = 0 ' Whether the player is falling. 1 = Falling
'Global Jumping:Int = 0 ' Are we jumping
ReadLevelData() ' We Read the level data
While Not KeyHit(KEY_ESCAPE)
Cls
DrawMap()
CheckIfPlayerCollideWithTile()
DrawPlayer()
MovePLayer()
DoJump()
Flip
Wend
'######################################################
'#### Function DrawPLayer() #
'#### Draws Player to Screen and gets Player Position #
'######################################################
Function DrawPlayer()
If CheckPlayerPosition = 0 ' We use this to check if there is a number 2 in the tilemap array. If you notice there is a number 2
'in the defdata statements. This is used to start the player at that position.
For Local x:Int = 0 Until MAPWIDTH ' Loop until MapWidth
For Local y:Int = 0 Until MAPHEIGHT' Loop Until MapHeight
Select Map[x,y]' We use a select function to select check data in the MapArray
Case 2 ' If the data in the map array = 2\/
PlayerX = getX(x) 'we get the location in pixels of the tiles x position and pass it to PlayerX
PlayerY = getY(y) ' we get the location in pixels of the tiles y position and pass it to PlayerY
CheckPlayerPosition = 1 ' We switch this to one because we don't want to check the start position of the player anymore
End Select
Next
Next
EndIf
DrawText "PlayerX = " +PlayerX , 0 , 20
DrawImage Player, PlayerX , PlayerY , 0 ' Now we have the where the number 2 was in the MapArray and have passed this position
'to Player X and PlayerY, we use this to draw the player at that location. So if you move the number 2
'elsewhere in the defdata statements the player will be drawn according to where it is.
End Function
'#################################################
'### Function MovePLayer() #
'## Moves Player and checks outer boundaries #
'#################################################
Function MovePLayer()
If KeyDown(KEY_LEFT) And Not KeyDown(KEY_RIGHT)
Direction = 0 ' set direction to 0. Going Left
PlayerX:-2 ' Minus 2 from Players X position to move him left
ElseIf KeyDown(KEY_RIGHT) And Not KeyDown(KEY_LEFT)
Direction = 1 ' set direction to 1. Going Right
PlayerX:+2 ' Add 2 to the players X position to move him right
End If
If PlayerX-32 <=0 ' Boundary checks to prevent our Player Jumping out the screen
PlayerX:+2
ElseIf PlayerX >= 800-64
PlayerX:-2
End If
End Function
'##########################################################
'### Function CheckIfPlayerCollideWithTile() #
'### Checks to see if the player has collided with a tile #
'### Checks also if the Player is falling #
'##########################################################
Function CheckIfPlayerCollideWithTile()
'#Region
Select Direction
Case 1
If Jump = 0
If Map[PlayerX/32+1, PlayerY/32] = 1 ' If we put the players X&y position within the map array and divide them by 32
PlayerX:-2 ' which is the size of the player and the tiles, we are able to determine which
EndIf ' tile the Player is on or near. if we have a +1 in PlayerX/32+1 or PlayerY/32+1
EndIf ' it just means we are checking the tiles next to the player. so if we add a +1
Case 0 ' to PlayerY/32 we are checking the tile under the players feet.
If Jump = 0 ' In this we are checking the tiles to the right and left and if they = 1 (Tile is present)
If Map[PlayerX/32, PlayerY/32] = 1 ' then we stop the player from moving.
PlayerX:+2
End If
EndIf
End Select
'#End Region
If Falling = 1 ' If falling = 1 we minus 3.2 from the players Y position making him fall.
PlayerY:+3.2
If Map[PlayerX/32,PlayerY/32+1] = 1 ' While he's falling if we check to see if a tile is underneath and if there is
Jump = 0 ' We stop falling. We reset Jump to 0 and CanJump to 1 and also reset the JumpHeight
Falling = 0
CanJump = 1
JumpHeight = 5.5
EndIf
End If
If Map[PlayerX/32,PlayerY/32+1] = 1 ' This is used seperately and does nothing apart from enabling me to use the "else bit"
Else ' If there's nothing under the players feat we start falling but only if we're not jumping
If Jump = 0
Falling = 1
EndIf
End If
End Function
'##############################################
'### Function DoJump() #
'### Makes our player jump #
'##############################################
Function DoJump()
If KeyHit(KEY_SPACE) And CanJump = 1 ' If we hit the space button and CanJump = 1
Jump = 1 ' We enable Jump
CanJump = 0 ' We Disable CanJump. Can't jump while jumping
End If
If Jump = 1 ' If Jump is enabled
PlayerY:-JumpHeight ' we minus JumpHeight from Players Y Position
JumpHeight:-Gravity ' We minus Gravity from JumpHeight
If JumpHeight <=-1.0 ' If JumpHeight <= -1.0
Falling = 1 ' We beging to fall by setting Falling to 1
EndIf
End If
End Function
'########################################
'### Function DrawMap() #
'### We Draw the Map to screen #
'########################################
Function DrawMap()
For Local x:Int = 0 Until MAPWIDTH ' we loop until MapWidth
For Local y:Int = 0 Until MAPHEIGHT ' We loop until MapHeight
Select Map[x,y] ' We select the data stored in the MapArray
Case 1 ' if it = 1
DrawImage Tiles , x*32 , y*32 , 0 ' we draw the tiles to there corresponding position
End Select
Next
Next
End Function
'#######################################################
'### Function ReadLevelData() #
'### We read the data stored in the defdata statements #
'#######################################################
Function ReadLevelData()
For Local y:Int = 0 Until MAPHEIGHT' We loop through the Y position first until MapHeight
For Local x:Int = 0 Until MAPWIDTH ' We Loop Until MAPWIDTH
Local data:Int ' Setup a local variable to store the data in
ReadData data ' We read the data from the defdata statements in to the data variable
Map[x,y] = data ' we assign the data in the data variable to our MapArray
Next
Next
End Function
'Function getX:Int(x:Int)
' Return sizeX * x '+ offsetX
'End Function
'
'Function getY:Int(y:Int)
' Return sizeX * y '+ offsetX
'End Function
Function getX:Int(x:Int)
Return 32 * x '+ offsetX
End Function
Function getY:Int(y:Int)
Return 32 * y '+ offsetX
End Function
DefData 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,1,1,1,1,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1
DefData 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,1,1,1,1,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1
DefData 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,2,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1
DefData 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1[edit 1] The art needed to get this example working can be download here.
http://www.kamikazekrow.com/storage/PlatArt.zip[edit 2] to put code in a scrollable box use the codebox tag. it's the same as [ code ] but [ codebox ].