El jugador de Pygame puede saltar todo el tiempo que desee.
Estoy tratando de crear un método de salto para mi jugador en pygame. Salta hacia arriba, pero puedo mantener presionada la tecla de barra espaciadora y seguirá subiendo todo el tiempo que quiera y no sé cómo evitarlo. Aquí está el código de mi clase de jugador:
import pygame
class Player(pygame.sprite.Sprite):
def __init__(self, pos):
super().__init__()
self.image = pygame.Surface((32, 64))
self.image.fill('blue')
self.rect = self.image.get_rect(topleft=pos)
self.direction = pygame.math.Vector2(0, 0)
self.speed = 8
self.jump_speed = -16
self.gravity = 0.8
def get_input(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_RIGHT] or keys[pygame.K_d]:
self.direction.x = 1
elif keys[pygame.K_LEFT] or keys[pygame.K_a]:
self.direction.x = -1
else:
self.direction.x = 0
if keys[pygame.K_SPACE] or keys[pygame.K_w] or keys[pygame.K_UP]:
self.jump()
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()
davy.ai
Para evitar que el jugador salte continuamente cuando se mantiene presionada la tecla de espacio, se puede añadir una declaración condicional en el método
jump
para comprobar si el jugador ya está saltando. Si el jugador ya está saltando, se puede evitar que el método jump se ejecute de nuevo hasta que el jugador aterrice en una superficie. Esto se puede hacer añadiendo una variable booleanaself.jumping
a la clase del jugador y estableciéndola comoTrue
cuando se llama al método jump, y volviéndola a establecer comoFalse
cuando el jugador aterrice en una superficie. Aquí tienes un ejemplo de implementación:En este ejemplo,
self.jumping
se establece comoTrue
cuando se llama al métodojump
por primera vez y permaneceráTrue
hasta que el jugador aterrice en una superficie. Cuando el jugador aterriza en una superficie, el atributorect.bottom
se establece comoSCREEN_HEIGHT
yself.jumping
se restablece comoFalse
.