Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mencegah Tembakan Peluru Serentak dalam Pygame?

Bagaimana untuk Mencegah Tembakan Peluru Serentak dalam Pygame?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-21 06:40:29256semak imbas

How to Prevent Simultaneous Bullet Firing in Pygame?

Bagaimanakah saya boleh menghentikan lebih daripada satu peluru daripada melepaskan tembakan serentak?

Dalam Pygame, menggunakan kaedah append() untuk menambah berbilang peluru pada senarai apabila pemain tembakan menyebabkan semua peluru menembak serentak. Untuk mengelakkan ini, laksanakan pemasa yang menjarakkan tembakan peluru.

Berikut ialah versi kod anda yang diubah suai yang menggabungkan pemasa:

<code class="python">import pygame
pygame.init()

# Game settings
screenWidth = 800
screenHeight = 600
clock = pygame.time.Clock()
# Bullet settings
bullet_delay = 500 # Time in milliseconds between shots
next_bullet = 0 # Time of next bullet

# Player settings
player1 = pygame.sprite.Sprite()
player1.image = pygame.Surface((50, 50))
player1.image.fill((255, 0, 0))
player1.rect = player1.image.get_rect()
player1.rect.center = (screenWidth / 2, screenHeight / 2)

# Group to hold all bullets
bullets = pygame.sprite.Group()

# Game loop
run = True
while run:
    clock.tick(30)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                # Check if enough time has passed since last shot
                current_time = pygame.time.get_ticks()
                if current_time >= next_bullet:
                    # Create a new bullet
                    bullet = pygame.sprite.Sprite()
                    bullet.image = pygame.Surface((10, 10))
                    bullet.image.fill((0, 0, 0))
                    bullet.rect = bullet.image.get_rect()
                    bullet.rect.center = player1.rect.center
                    # Add bullet to group
                    bullets.add(bullet)
                    # Reset next bullet time
                    next_bullet = current_time + bullet_delay

    # Update game objects
    player1.update()
    bullets.update()

    # Handle bullet movement
    for bullet in bullets:
        bullet.rect.y -= 5 # Change to desired bullet speed

        # Remove any bullets that have moved off the screen
        if bullet.rect.bottom <= 0:
            bullets.remove(bullet)

    # Draw objects on the screen
    screen.fill((0, 0, 0))
    screen.blit(player1.image, player1.rect)
    bullets.draw(screen)

    # Update the display
    pygame.display.update()

pygame.quit()</code>

Dalam kod yang diubah suai ini, bullet_delay menentukan kelewatan antara tangkapan dan next_bullet menjejaki masa tangkapan seterusnya yang dibenarkan. Apabila pemain menekan ruang, kami menyemak sama ada masa telah berlalu sejak pukulan terakhir (berdasarkan next_bullet). Jika ya, peluru dibuat dan ditambah pada kumpulan peluru. Pemasa ini memastikan bahawa hanya satu peluru boleh dilepaskan pada satu masa, dengan kelewatan ditentukan oleh bullet_delay.

Atas ialah kandungan terperinci Bagaimana untuk Mencegah Tembakan Peluru Serentak dalam Pygame?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn