Búsqueda de sitios web

Cómo implementar la mecánica de salto en la biblioteca Arcade de Python


La mayoría de los juegos de plataformas utilizan algún tipo de salto, con variaciones que incluyen salto doble y salto de altura variable. Descubre las técnicas detrás de estos movimientos.

La mecánica de salto juega un papel crucial a la hora de mejorar la experiencia de juego de un juego de plataformas. Al implementar varias mecánicas de salto con la biblioteca Arcade de Python, puedes agregar profundidad y emoción a tus juegos.

La biblioteca Arcade proporciona un marco intuitivo y fácil de usar para crear juegos, lo que la convierte en una opción ideal para crear tu propio juego de plataformas.

Crea un juego sencillo

Antes de comenzar, instale pip en su dispositivo y use este comando para instalar el módulo arcade:

pip install arcade

Para explorar cómo funcionan las mecánicas de salto, comience creando un juego simple donde el jugador pueda moverse hacia la izquierda y hacia la derecha con gravedad y una plataforma estática.

El código utilizado en este artículo está disponible en este repositorio de GitHub y su uso es gratuito bajo la licencia MIT.

En el juego, el jugador chocará con la plataforma y se parará encima de ella. Crea un nuevo archivo llamado simple-game.py y agrega el siguiente código:

import arcade
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_RADIUS = 20
PLATFORM_WIDTH = 200
PLATFORM_HEIGHT = 20
GRAVITY = 0.5
blue = arcade.color.BLUE
green = arcade.color.GREEN
class GameWindow(arcade.Window):
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Jumping Mechanics")
        self.player_x = SCREEN_WIDTH // 2
        self.player_y = SCREEN_HEIGHT // 2
        self.player_dy = 0
        self.platform_x = SCREEN_WIDTH // 2
        self.platform_y = SCREEN_HEIGHT // 4
    def on_draw(self):
        arcade.start_render()
        arcade.draw_circle_filled(self.player_x, self.player_y, 
                                  PLAYER_RADIUS, blue)
        arcade.draw_rectangle_filled(self.platform_x, self.platform_y, 
                                     PLATFORM_WIDTH, PLATFORM_HEIGHT, green)
    def on_update(self, delta_time):
        self.player_dy -= GRAVITY
        self.player_y += self.player_dy
        dist = PLAYER_RADIUS + self.platform_y + PLATFORM_HEIGHT / 2
        if self.player_y < dist:
            self.player_y = dist
            self.player_dy = 0
game = GameWindow()
arcade.run()

Cuando ejecutes el programa, verás que el objeto del jugador cae rápidamente sobre la plataforma y luego permanece apoyado encima de ella.

Agregar una función de salto simple

Ahora, agrega una función de salto simple al juego. Verifique la colisión entre el jugador y la plataforma y active la acción de salto cuando el jugador presione la tecla de flecha hacia arriba. Para lograr esto, cree un nuevo archivo llamado jump.py y el código con las siguientes actualizaciones:

class GameWindow(arcade.Window):
    def __init__(self):
        # ...
    def on_key_press(self, key, modifiers):
        on_ground = PLAYER_RADIUS + self.platform_y + PLATFORM_HEIGHT / 2
        if key == arcade.key.UP and self.player_y == on_ground:
            self.player_dy = 10 
    
    def on_update(self, delta_time):
        self.player_dy -= GRAVITY
        self.player_y += self.player_dy
        dist = PLAYER_RADIUS + self.platform_y + PLATFORM_HEIGHT / 2
        if self.player_y < dist:
            self.player_y = dist
            self.player_dy = 0
            self.jump_count = 0

Agregar una función de doble salto

Para agregar una función de doble salto, amplíe la lógica de salto existente. Cuando el jugador esté en la plataforma y presione la tecla de flecha hacia arriba por primera vez, realizará un salto normal. Sin embargo, si vuelve a presionar la tecla de flecha hacia arriba mientras está en el aire, el jugador ejecutará un doble salto.

Cree un nuevo archivo llamado double-jump.py y el código con las siguientes actualizaciones:

class GameWindow(arcade.Window):
    def __init__(self):
        self.jump_count = 0 # Track the number of jumps
    def on_key_press(self, key, modifiers):
        on_ground = PLAYER_RADIUS + self.platform_y + PLATFORM_HEIGHT / 2
        if key == arcade.key.UP:
            if self.player_y == on_ground or self.jump_count < 2:
                self.player_dy = 10
                self.jump_count += 1

Incluyendo características adicionales

Además de los saltos simples y dobles, hay muchas funciones que puedes agregar para mejorar la mecánica de salto de tu juego.

Implementación de altura de salto variable

Permitir que el jugador controle la altura de sus saltos en función de cuánto tiempo mantenga presionado el botón de salto puede agregar más control y estrategia al juego. A continuación se muestra un ejemplo de cómo se puede implementar una altura de salto variable. Cree un nuevo archivo llamado variable-jump.py y el código con las siguientes actualizaciones:

GRAVITY = 0.5
JUMP_POWER_INCREMENT = 0.2
MAX_JUMP_POWER = 100
class GameWindow(arcade.Window):
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Jumping Mechanics")
        self.jump_pressed = False 
        self.jump_power = 0 
    def on_key_press(self, key, modifiers):
        on_ground = PLAYER_RADIUS + self.platform_y + PLATFORM_HEIGHT / 2
        if key == arcade.key.UP and self.player_y == on_ground:
            self.jump_pressed = True
    def on_key_release(self, key, modifiers):
        if key == arcade.key.UP:
            self.jump_pressed = False
    def update_jump_power(self):
        # Increase the jump power while the jump button is held
        if self.jump_pressed:
            self.jump_power += JUMP_POWER_INCREMENT
            if self.jump_power > MAX_JUMP_POWER:
                self.jump_power = MAX_JUMP_POWER
        else:
            if self.jump_power > 0:
                self.jump_power -= 1
    def on_update(self, delta_time):
        self.player_dy -= GRAVITY
        dist = PLAYER_RADIUS + self.platform_y + PLATFORM_HEIGHT / 2
        if self.player_y == dist and self.jump_power > 0:
            self.player_dy = self.jump_power
        self.player_y += self.player_dy
        self.update_jump_power()

Implementación de la función Air Dash

Agregar una mecánica de carrera aérea puede brindarle al jugador opciones de movilidad adicionales mientras está en el aire. Cree un nuevo archivo llamado air-dash.py y el código con las siguientes actualizaciones:

AIR_DASH_DISTANCE = 100
MAX_AIR_DASHES = 2
class GameWindow(arcade.Window):
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Jumping Mechanics")
        self.on_ground = False 
        self.air_dashes = 0 
        self.can_air_dash = True
    def on_key_press(self, key, modifiers):
        if key == arcade.key.UP and self.on_ground:
            self.player_dy = 10 
        elif key == arcade.key.UP and \
                self.air_dashes < MAX_AIR_DASHES and \
                self.can_air_dash:
            self.player_dx = AIR_DASH_DISTANCE 
            self.air_dashes += 1
            self.can_air_dash = False
    def on_update(self, delta_time):
        self.player_dy -= GRAVITY
        self.player_y += self.player_dy
        dist = PLAYER_RADIUS + self.platform_y + PLATFORM_HEIGHT / 2
        if self.player_y <= dist:
            self.player_y = dist
            self.player_dy = 0
            self.on_ground = True
        else:
            self.on_ground = False
        self.player_x += self.player_dx
        if self.player_x < PLAYER_RADIUS:
            self.player_x = PLAYER_RADIUS
            self.player_dx = 0
        elif self.player_x > SCREEN_WIDTH - PLAYER_RADIUS:
            self.player_x = SCREEN_WIDTH - PLAYER_RADIUS
            self.player_dx = 0
        if self.on_ground:
            self.air_dashes = 0
            self.can_air_dash = True

Cuando realices el movimiento aéreo, tu personaje jugador se alejará de la plataforma:

Mejores prácticas para la mecánica de salto

La implementación de mecánicas de salto en un juego requiere una cuidadosa consideración para garantizar una experiencia de juego fluida y agradable. Estas son algunas de las mejores prácticas a tener en cuenta:

Equilibrio de altura y duración del salto

Para mantener la sensación de realismo y dificultad del juego, es importante equilibrar la altura y la duración del salto. Un salto demasiado alto o demasiado corto puede afectar negativamente al juego. Experimenta con diferentes alturas y duraciones de salto para encontrar el equilibrio adecuado para tu juego.

Considere la física del juego, las habilidades de los personajes y el diseño general de niveles al determinar la mecánica de salto adecuada.

Proporcionar comentarios visuales y de audio

La retroalimentación visual y de audio es crucial para que los saltos se sientan receptivos y satisfactorios. Utilice animaciones o efectos de partículas para representar el movimiento de salto y aterrizaje del jugador.

Además, considere agregar efectos de sonido o música de fondo que mejoren la experiencia de salto. Estas señales visuales y de audio contribuyen a la inmersión y la participación de los jugadores.

Ajuste preciso de la detección de colisiones

La detección precisa de colisiones entre el jugador y las plataformas es esencial para una mecánica de salto precisa y confiable. Asegúrese de que el algoritmo de detección de colisiones sea sólido y maneje adecuadamente diversos escenarios, como aterrizar en una plataforma, chocar con obstáculos o deslizarse a lo largo de paredes.

Pruebe e itere su código de detección de colisiones para eliminar cualquier falla o inconsistencia que pueda afectar la mecánica de salto.

Haz que los juegos sean más divertidos con la mecánica de saltos

La incorporación de mecánicas de salto puede mejorar enormemente la participación y el disfrute de un juego. Abre nuevas posibilidades para el diseño de niveles, acertijos y obstáculos desafiantes. Al implementar diferentes mecánicas de salto en la biblioteca de juegos Arcade de Python, puedes crear juegos de plataformas cautivadores que mantendrán a los jugadores entretenidos durante horas.

Recuerda, experimentar con diferentes mecánicas de salto e incorporar características únicas puede diferenciar tu juego y convertirlo en una experiencia inmersiva y memorable para los jugadores.

Artículos relacionados: