Describe the problemI'm having trouble with my python platformer collision logic, i've recently started following tutorials of a youtube creator for pygame platformers. And had no trouble in making a platformer until the collision logic. I tried to perfect my code but i'm still having issues;
For example:
1. When i move in any direction while on top of a tile i phase trough the tile vertically.
2. When i land on top of a tile the feet of my character get stuck a few pixels inside the tile.
3. (Not really an issue) I have no idea how to write jumping code, i tried changing the Y Velocity to -5 and then the game glitched out.
My goal with the collision logic was to stop the player when colliding with a block, to be more specific when colliding with a side the player stops.
Project File: https://github.com/1NilusNilus/Pygame-Platformer
Movement code for the Player:
def move(self):
print(self.VEL)
self.RECT.x = self.POS[0]
self.RECT.y = self.POS[1]
self.POS[0] = self.RECT.x
self.POS[1] = self.RECT.y
self.POS[0] += self.VEL[0]
self.VEL[0] = 0
if self.DIR["left"]:
self.VEL[0] = -5
if self.DIR["right"]:
self.VEL[0] = 5
for tile in self.TILE.testCollision(self.RECT):
if self.VEL[0] > 0:
self.RECT.left = tile.right
if self.VEL[0] < 0:
self.RECT.right = tile.left
self.POS[1] += self.VEL[1]
self.VEL[1] += self.GRAVITY
for tile in self.TILE.testCollision(self.RECT):
if self.VEL[1] > 0:
self.VEL[1] = 0
self.RECT.bottom = tile.top
Collision Code for the tiles:
def testCollision(self, rect):
self.RECT.x = self.POS[0]
self.RECT.y = self.POS[1]
hitlist = []
for tile in self.TILES:
if rect.colliderect(tile):
hitlist.append(self.RECT)
return hitlist
What I have tried:
I have tried rewriting the code multiple times, i have tried watching the tutorials all over again, i have tried asking the web questions and researching.