"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 hacer que un jugador dispare balas en un juego mientras mantiene al jugador visible?

¿Cómo hacer que un jugador dispare balas en un juego mientras mantiene al jugador visible?

Publicado el 2025-02-22
Navegar:362

How to Make a Player Shoot Bullets in a Game While Keeping the Player Visible?

disparando balas con la barra espacial

esta pregunta implica implementar la capacidad de disparar balas cuando se presiona la barra espacial, mientras se mantiene un personaje de jugador en la pantalla [. &&&]

Problema y solución

El código del solicitante inicialmente tenía un problema en el que el personaje del jugador desapareció al disparar. Esto se debe a que el movimiento y el movimiento del jugador se separaron en diferentes bucles. Para abordar esto, necesitamos combinarlos en un solo bucle principal donde ambos comportamientos se actualicen simultáneamente.

Otro problema era la incapacidad de romper el bucle de disparo cuando la bala alcanzó la parte superior de la pantalla. El código original usó un bucle de tiempo que continuó infinitamente. Para solucionar esto, necesitamos usar un bucle de tiempo con una condición que verifique si la bala ha llegado a la parte superior.

explicación

aquí hay una versión revisada del código:

import pygame, os

# Boilerplate setup omitted for brevity

class Player:
    def __init__(self, x, y, height, width):
        ...

    def draw(self):
        ...

    def move_left(self):
        ...

    def move_right(self):
        ...


class Bullet:
    def __init__(self, x, y):
        ...

    def update(self):
        ...

    def draw(self):
        ...


# Lists of bullets
bullets = []

# Initialize player
p = Player(600, 500, 50, 30)

# Main game loop
run = True
while run:
    clock.tick(100)
    
    # Handle events
    for event in pygame.event.get():
        if event.type ==  pygame.QUIT:
            run = False
        if event.type ==  pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                bullets.append(Bullet(p.x p.width//2, p.y))

    # Update objects
    keys = pygame.key.get_pressed()        
    if keys[pygame.K_LEFT]:
        p.move_left()
    if keys[pygame.K_RIGHT]:
        p.move_right()
    for b in bullets:
        b.update()
        # Update position and remove bullet if it goes off-screen
        if b.y < 0:
            bullets.remove(b)

    # Update frame
    d.fill((98, 98, 98))
    for b in bullets:
        b.draw()
    p.draw()
    win.update()
Cambios de clave:

    La lógica del movimiento de disparos y el jugador ahora se combinan en un solo bucle de juego principal.
  • la función de actualización de la bala ahora verifica si la bala se ha ido fuera de la pantalla y la elimina en consecuencia.
  • el bucle principal actualiza continuamente y dibuja el reproductor y las balas, Asegurar que ambos estén presentes en la pantalla.
Ú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