hey hi, i add jump to my game but the charracter can keep jumping infinitely, how do i fix that? heres my code
import pygame, sys level_map = [ ' ', ' ', ' XX XXX XX ', ' XX P ', ' XXXX XX XX ', ' XXXX XX ', ' XX X XXXX XX XX ', ' X XXXX XX XXX ', ' XXXX XXXXXX XX XXXX ', 'XXXXXXXX XXXXXX XX XXXX '] title_size = 64 screen_width = 1200 screen_height = len(level_map) * title_size class Tile(pygame.sprite.Sprite): def __init__(self,pos,size): super().__init__() self.image = pygame.Surface((size,size)) self.image.fill('grey') self.rect = self.image.get_rect(topleft = pos) def update(self,x_shift): self.rect.x += x_shift class Player(pygame.sprite.Sprite): def __init__(self,pos): super().__init__() self.image = pygame.Surface((32,64)) self.image.fill('red') self.rect = self.image.get_rect(topleft = pos) #player movment self.direction = pygame.math.Vector2(0,0) self.speed = 8 self.gravity = 0.8 self.jump_speed = -16 self.jump_counter= 1 def get_input(self): keys = pygame.key.get_pressed() #COMANDOS if keys[pygame.K_RIGHT]: self.direction.x = 1 elif keys[pygame.K_LEFT]: self.direction.x = -1 else: self.direction.x = 0 if self.jump_counter==1: if keys[pygame.K_UP] or keys[pygame.K_SPACE]: self.jump() self.jump_counter+1 def apply_gravity(self): self.direction.y += self.gravity self.rect.y += self.direction.y def jump(self): self.direction.y = self.jump_speed def update(self): self.get_input() class Level: def __init__(self,level_data,surface): # level setup self.display_surface = surface self.setup_level(level_data) self.world_shift = 0 def setup_level(self,layout): self.tiles = pygame.sprite.Group() self.player = pygame.sprite.GroupSingle() for row_index,row in enumerate(layout): for col_index,cell in enumerate(row): x = col_index * title_size y = row_index * title_size if cell == 'X': tile = Tile((x,y),title_size) self.tiles.add(tile) if cell == 'P': player_sprite = Player((x,y)) self.player.add(player_sprite) def scream_scroll(self): Player = self.player.sprite Player_x = Player.rect.centerx direction_x = Player.direction.x if Player_x < screen_width / 10 and direction_x < 0: self.world_shift = 5 Player.speed = 0 elif Player_x > screen_width - (screen_width / 10) and direction_x > 0: self.world_shift = -5 Player.speed = 0 else: self.world_shift = 0 Player.speed = 5 def colision_x(self): player = self.player.sprite player.rect.x += player.direction.x * player.speed for sprite in self.tiles.sprites(): if sprite.rect.colliderect(player.rect): if player.direction.x < 0: player.rect.left = sprite.rect.right elif player.direction.x > 0: player.rect.right = sprite.rect.left def colision_y(self): player = self.player.sprite player.apply_gravity() for sprite in self.tiles.sprites(): if sprite.rect.colliderect(player.rect): if player.direction.y > 0: player.rect.bottom = sprite.rect.top player.direction.y = 0 elif player.direction.y < 0: player.rect.top = sprite.rect.bottom player.direction.y = 0.5 def run(self): #level tiles self.tiles.update(self.world_shift) self.tiles.draw(self.display_surface) self.scream_scroll() #player self.player.update() self.colision_x() self.colision_y() self.player.draw(self.display_surface) pygame.init() screen = pygame.display.set_mode((screen_width,screen_height)) clock = pygame.time.Clock() level = Level(level_map,screen) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() screen.fill('black') level.run() pygame.display.update() clock.tick(60)