HI, I've sorted it. The new code takes in to account the Player Width. Modify Player_Width to anything below say 28 and it will take care of the collision.
the Collision is based on the player being 16 pixels wide.
This now works well. It could do with more tweaking to perfect it but that's something I'll do later.
Here's the code.
I'd like to thank all who helped me get this working and for their patience.
Hopefully this code will help people with their platform games and help them learn as I did.
Big up to the BRL members. :)
the Collision is based on the player being 16 pixels wide.
This now works well. It could do with more tweaking to perfect it but that's something I'll do later.
Here's the code.
SuperStrict Graphics 800 , 600 Global Tiles:TImage = LoadImage("tile.png") Global Player:TImage = LoadImage("player1632.png") Const MAPWIDTH:Int = 800/32 Const MAPHEIGHT:Int = 600/32 Global Map:Int[MAPWIDTH , MAPHEIGHT] Global PlayerX:Float Global PlayerY:Float Global Player_Width:Int = 16 Global Player_Height:Int = 32 Global CheckPlayerPosition:Int = 0 Global Direction:Int = -1 Global Jump:Int = 0 Const Gravity:Float = 0.2 Global JumpHeight:Float = 5.3 Global CanJump:Int = 1 Global Falling:Int = 0 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 For Local x:Int = 0 Until MAPWIDTH For Local y:Int = 0 Until MAPHEIGHT Select Map[x, y] Case 2 PlayerX = getX(x) PlayerY = getY(y) CheckPlayerPosition = 1 End Select Next Next EndIf DrawText "PlayerX = " +PlayerX , 0 , 20 DrawImage Player, PlayerX , PlayerY , 0 End Function '################################################# '### Function MovePLayer() # '## Moves Player and checks outer boundaries # '################################################# Function MovePLayer() If KeyDown(KEY_LEFT) And Not KeyDown(KEY_RIGHT) Direction = 0 PlayerX:-2 ElseIf KeyDown(KEY_RIGHT) And Not KeyDown(KEY_LEFT) Direction = 1 PlayerX:+2 End If If PlayerX - 32 <= 0 PlayerX:+2 ElseIf PlayerX >= 800 - 32 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 - Player_Width) / 32 + 1, PlayerY / 32]= 1 PlayerX:-2 EndIf EndIf If Jump = 1 and PlayerX >= 784 - 32 If Map[(PlayerX - Player_Width) / 32 + 1, PlayerY / 32]= 1 PlayerX:-2 EndIf End If Case 0 If Jump = 0 If Map[(PlayerX + Player_Width) / 32, PlayerY / 32]= 1 PlayerX:+2 End If EndIf End Select '#End Region If Falling = 1 PlayerY:+3.2 If Map[(PlayerX + Player_Width) / 32, PlayerY / 32 + 1]= 1 or Map[(PlayerX - Player_Width * 2) / 32 + 1, PlayerY / 32 + 1]= 1 If (PlayerY mod 32.0) <= 6.4 PlayerY = PlayerY - (PlayerY mod 32) Jump = 0 Falling = 0 CanJump = 1 JumpHeight = 5.5 EndIf EndIf End If If not Map[(PlayerX + Player_Width) / 32, PlayerY / 32 + 1]and not Map[(PlayerX - Player_Width * 2) / 32 + 1, PlayerY / 32 + 1] If Jump = 0 Falling = 1 End If End If End Function '############################################## '### Function DoJump() # '### Makes our player jump # '############################################## Function DoJump() If KeyHit(KEY_SPACE) and CanJump = 1 Jump = 1 CanJump = 0 End If If Jump = 1 PlayerY:-JumpHeight JumpHeight:-Gravity If JumpHeight <= - 1.0 or PlayerY < 32 Falling = 1 EndIf End If End Function '######################################## '### Function DrawMap() # '### We Draw the Map to screen # '######################################## Function DrawMap() For Local x:Int = 0 Until MAPWIDTH For Local y:Int = 0 Until MAPHEIGHT Select Map[x, y] Case 1 DrawImage Tiles, x * 32, y * 32, 0 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 For Local x:Int = 0 Until MAPWIDTH Local Data:Int ReadData Data Map[x, y]= Data Next Next 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, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1 DefData 1, 0, 1, 0, 1, 1, 0, 1, 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, 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
I'd like to thank all who helped me get this working and for their patience.
Hopefully this code will help people with their platform games and help them learn as I did.
Big up to the BRL members. :)