"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo implementar un desplazamiento sin problemas en los juegos de plataformas de Pygame?

¿Cómo implementar un desplazamiento sin problemas en los juegos de plataformas de Pygame?

Publicado el 2025-03-22
Navegar:807

How to Implement Smooth Scrolling in Pygame Platformer Games?

Agregar desplazamiento a un juego de plataformas en pygame

en juegos de juego de plataformas, los jugadores navegan a través de los niveles mientras su posición en la pantalla permanece centrada. Este efecto se logra mediante el desplazamiento, que permite que el mundo del juego se mueva independientemente de la posición del reproductor.

implementando desplazamiento:

para implementar desplazamiento en pygame, use una clase cámara que define el mundo del juego entre el mundo y la posición del jugador. Este desplazamiento se aplica a la posición de todas las entidades de juego cuando se dibujan en la pantalla.

creando la clase de cámara:

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)
  • cámaras_func: determina cómo la cámara sigue al reproductor.
  • ancho, altura: tamaño del nivel en el nivel en píxeles.

Funciones de la cámara:

[&]

Hay varias formas de implementar la cámara_func:

  • centrando el reproductor: [&] def sencillo l, t, _, _ = target_rect # l = izquierda, t = top _, _, w, h = cámara # w = ancho, h = altura 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)
  • manteniendo los límites de nivel:
  • def comple_camera (cámara, target_rect):: x = -target_rect.center [0] win_width/2 y = -target_rect.center [1] win_height/2 Camera.topleft = (pygame.vector2 ((x, y)) - pygame.vector2 (cámaras.topleft)) * 0.06 # Agregue algo de suavidad Coolnes Camera.x = max (-(cámara.width-win_width), min (0, cámara.x)) Camera.y = max (-(Camera.Height-Win_Height), Min (0, Camera.y))) devuelve cámara

    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)
  • aplicando desplazamiento a entidades:

para aplicar desplazamiento, instanciar la clase de cámara y llamar a sus métodos de actualización y aplicar dentro del bucle principal: ]# Cree la cámara de la cámara Camera = Camera (Complex_Camera, Total_Level_Width, Total_Level_Height) # Actualizar la cámara Camera.update (reproductor) # Aplicar desplazamiento a todas las entidades Para E en entidades: screen.blit (e.Image, Camera.apply (e))

consideraciones adicionales:
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)

use un capas en capas

subcLass para manejar los grupos de Sprite Sprite. necesidades.
  • Maneja los límites de nivel para evitar que los jugadores salgan fuera de la pantalla.
  • siguiendo estos pasos, puede implementar el desplazamiento en su juego de plataformas PyGame y crear una experiencia suave y atractiva para los jugadores.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3