"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como fazer com que um jogador atire balas em um jogo enquanto mantém o jogador visível?

Como fazer com que um jogador atire balas em um jogo enquanto mantém o jogador visível?

Postado em 2025-02-22
Navegar:712

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

disparando balas com a barra de espaço

Esta pergunta envolve a implementação da capacidade de disparar balas quando a barra de espaço é pressionada, mantendo um caractere de jogador na tela.

Problem and Solution

O código do Asker inicialmente teve um problema em que o personagem do jogador desapareceu ao fotografar. Isso ocorre porque o tiroteio e o movimento do jogador foram separados em diferentes loops. Para resolver isso, precisamos combiná -los em um único loop principal, onde ambos os comportamentos são atualizados simultaneamente. O código original usou um loop de tempo que continuava infinitamente. Para corrigir isso, precisamos usar um loop de tempo com uma condição que verifica se a bala chegou ao topo. &&&]

import pygame, os # Configuração de boilerplate omitida para brevidade jogador de classe: def __init __ (self, x, y, altura, largura): ... def draw (self): ... def move_left (self): ... def move_right (self): ... bala de aula: def __init __ (self, x, y): ... Def Update (self): ... def draw (self): ... # Listas de balas balas = [] # Inicialize o jogador p = jogador (600, 500, 50, 30) # Loop de jogo principal executar = true enquanto executa: relógio.Tick (100) # Lide com eventos Para o evento em pygame.event.get (): se event.type == pygame.quit: executar = false se event.type == pygame.keydown: se event.key == pygame.k_space: Bullets.Append (Bullet (P.X P.Width // 2, P.Y)) # Atualizar objetos keys = pygame.key.get_pressed () Se keys [pygame.k_left]: p.move_left () Se keys [pygame.k_right]: p.move_right () Para B em balas: B.Update () # Atualizar posição e remover a bala se ele sair da tela Se B.Y & lt; 0: balas.remove (b) # Quadro de atualização D.Fill ((98, 98, 98)) Para B em balas: B.Draw () P.Draw () win.Update ()

mudanças de chave:

as arremessos e a lógica do movimento do jogador agora são combinadas em um único loop de jogo principal.

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()
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3