I am trying to add a platform to my game so that once you hit it the player stays on the platform until it fall off in which case it would hit the ground. The jump does work but the collision does not
I have tried adding some of the typical types of collision detectors below but they all have down sides
class Platform: def __init__(self, x, y, background): self.xpos = x self.ypos = y self.picture = background self.picture = pygame.transform.scale(self.picture, (500, 100)) self.rect = self.picture.get_rect() def draw(self): screen.blit(self.picture, (self.xpos, self.ypos)) class Player: def __init__(self, x, y, pic_one, pic_two, pic_three, pic_four): self.xpos = x self.ypos = y self.speed_y = 0 self.speed_x = 0 self.picture = pic_one self.picture_one = pic_one self.picture_two = pic_two self.picture_three = pic_three self.picture_four = pic_four self.on_ground = True self.picture = pygame.transform.scale(self.picture, (100, 100)) self.rect = self.picture.get_rect() def update(self): self.xpos += self.speed_x self.ypos += self.speed_y GRAVITY = 0.9 self.speed_y += GRAVITY # Accelerate downwards. self.xpos += self.speed_x self.ypos += self.speed_y if self.ypos >= 620: self.ypos = 620 self.speed_y = 0 self.on_ground = True if self.on_ground == True: self.speed_y = 0 def jump(self): if self.on_ground: self.on_ground = False self.speed_y = -20#Makes you move upwards def draw(self): screen.blit(self.picture, (self.xpos, self.ypos)) def is_collided_with(self, sprite): return self.rect.colliderect(sprite.rect) player_one = Player(30, 600, player_one_first_pic) wood_platform = Platform(400, 400, platform_pic) while True: [...] this is the typical type of collision I would try and have used but the if statement appears to never happen
if player_one.rect.bottom == wood_platform.rect.top: player_one.on_ground = True another on which I have tried which is detecting if the rectangles collide and the if statement is True even when the rectangles are not colliding
if player_one.is_collided_with(wood_platform): player_one.on_ground = True this method I am not comfortable with doing because its insufficient
if player_one.ypos == 600: player_one.on_ground = True The actual results for the method that I used were that the player did not collide with the wooden platform at all
(Here is a diagram if you do need a little bit more of an understanding:)
Checks for collision but does not appear to work
if player_one.rect.y == wood_platform.rect.y: print(True) player_one.on_ground = True on_platform = True else: on_platform = False changes after each update
self.rect.x = self.xpos self.rect.y = self.ypos