"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment implémenter un défilement en douceur dans les jeux de plateforme Pygame?

Comment implémenter un défilement en douceur dans les jeux de plateforme Pygame?

Publié le 2025-03-22
Parcourir:223

How to Implement Smooth Scrolling in Pygame Platformer Games?

Ajoutez de défiler à un plateforme dans pygame

dans les jeux de plateforme, les joueurs naviguent à travers les niveaux tandis que leur position à l'écran reste centrée. Cet effet est réalisé grâce à un défilement, ce qui permet au monde du jeu de se déplacer indépendamment de la position du lecteur.

Implémentation de défilement:

pour mettre en œuvre le défilement pygame, utilisez une classe de caméra qui définit le décalage entre le monde du jeu et la position du joueur. Ce décalage est ensuite appliqué à la position de toutes les entités de jeu lorsqu'elles sont dessinées sur l'écran.

Création de la classe de caméra:

class Camera:
    def __init__(self, camera_func, width, height):
        self.camera_func = camera_func
        self.state = Rect(0, 0, width, height)

    def apply(self, target):
        return target.rect.move(self.state.topleft)

    def update(self, target):
        self.state = self.camera_func(self.state, target.rect)
  • caméra_func: détermine comment la caméra suit le lecteur. Pixels.
  • fonctions de l'appareil photo:

Il existe différentes façons d'implémenter le caméra_func:

centrer le lecteur:
  • def Simple_cama (CAPACRY, Targect): &&] def Simple_cama (CAPACRY, Targect): &&] Def Simple_cama (CAPACRY, Targect): &&]

    def Simple_cama (CAPACRY, Targect). l, t, _, _ = target_rect # l = gauche, t = top _, _, w, h = caméra # w = largeur, h = hauteur return rect (-l half_width, -t half_height, w, h)
    def simple_camera(camera, target_rect):
      l, t, _, _ = target_rect  # l = left, t = top
      _, _, w, h = camera      # w = width, h = height
      return Rect(-l   HALF_WIDTH, -t   HALF_HEIGHT, w, h)
  • maintien des limites de niveau:

    def complexe_camera (caméra, cible_rect): x = -target_rect.center [0] win_width / 2 y = -target_rect.center [1] win_height / 2 caméra.topleft = (pygame.vector2 ((x, y)) - pygame.vector2 (caméra.topleft)) * 0,06 # Ajouter de la douceur coolnes caméra.x = max (- (caméra.width-win_width), min (0, caméra.x))) caméra.y = max (- (caméra.height-win_height), min (0, caméra.y)) return caméra
    def simple_camera(camera, target_rect):
      l, t, _, _ = target_rect  # l = left, t = top
      _, _, w, h = camera      # w = width, h = height
      return Rect(-l   HALF_WIDTH, -t   HALF_HEIGHT, w, h)

Appliquer le défilement aux entités:

pour appliquer le défilement, instancier la classe de la caméra et appeler sa mise à jour et appliquer des méthodes dans la boucle de jeu principale:

# caméra = caméra (complex_camera, total_level_width, total_level_height) # Mettre à jour l'appareil photo caméra.Update (joueur) # Appliquer le défilement à toutes les entités pour e en entités: Screen.blit (e.image, caméra.Apply (e))
def simple_camera(camera, target_rect):
  l, t, _, _ = target_rect  # l = left, t = top
  _, _, w, h = camera      # w = width, h = height
  return Rect(-l   HALF_WIDTH, -t   HALF_HEIGHT, w, h)

Considérations supplémentaires:

    Utilisez un
  • sous -dupdates pour gérer les groupes de sprit de caméra. Besoins.
  • Gérer les limites de niveau pour empêcher les joueurs de sortir hors écran.
  • En suivant ces étapes, vous pouvez implémenter le défilement dans votre plateforme Pygame et créer une expérience fluide et engageante pour les joueurs.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3