2 votes

Je veux que mon personnage dans pygame ne sorte pas de l'écran

Je essaie de créer un jeu de plateforme simple en pygame où le joueur reviendra au début de la fenêtre s'il va trop loin à droite. Cependant, mon code ne fonctionne pas et le joueur peut sortir de l'écran sans revenir au début. Voici mon code jusqu'à présent :

class Player(pg.sprite.Sprite):

    def __init__(self):
        pg.sprite.Sprite.__init__(self)
        self.image = pg.Surface((30,40))
        self.image.fill(green)
        self.rect = self.image.get_rect()
        self.rect.center = (width /2, height /2)
        self.speed_x = 0
        self.speed_y = 0
        self.pos = 480

    def update(self):
        self.speed_x = 0
        player_input = pg.key.get_pressed()
        if player_input[pg.K_LEFT]:
            self.speed_x = -5

        if player_input[pg.K_RIGHT]:
            self.speed_x = 5

        self.rect.x += self.speed_x
        self.rect.y += self.speed_y

        # revenir de l'autre côtés de l'écran
        if self.pos > 480:
            self.pos  = 0
        if self.pos < 0:
            self.pos = -480,0

1voto

Rabbid76 Points 52493

Vous devez modifier self.rect.x et self.rect.y plutôt que self.pos

La manière la plus facile d'atteindre ce que vous voulez est d'utiliser l'opérateur % (modulo). L'opérateur % (modulo) renvoie le reste de la division du premier argument par le second. Voir Opérations arithmétiques binaires.

Par exemple:

class Player(pg.sprite.Sprite):
    # [...]

    def update(self):

        # [...]

        self.rect.x += self.speed_x
        self.rect.y += self.speed_y

        rect.centerx = rect.centerx % width
        rect.centery = rect.centery % height

0voto

The Big Kahuna Points 2040

Lorsque vous déplacez le joueur, vous changez self.rect.x, mais ne changez pas self.pos, donc lorsque vous sortez de l'écran, self.pos sera toujours égal à 480, donc vous voulez vérifier si self.rect.x est hors de l'écran, alors réinitialisez-le.

# revenir sur les côtés de l'écran
if self.rect.x > 480:
    self.rect.x  = 0
if self.rect.x < 0:
    self.rect.x = 480

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X