ホームページ >バックエンド開発 >Python チュートリアル >Pygameで弾丸の同時発射を防ぐにはどうすればよいですか?

Pygameで弾丸の同時発射を防ぐにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-21 06:40:29249ブラウズ

How to Prevent Simultaneous Bullet Firing in Pygame?

一度に複数の弾丸の発射を停止するにはどうすればよいですか?

Pygame では、プレーヤーの操作時に append() メソッドを使用してリストに複数の弾丸を追加します。射撃するとすべての弾丸が同時に発射されます。これを防ぐには、弾丸の発射の間隔を空けるタイマーを実装します。

タイマーを組み込んだコードの修正バージョンを次に示します。

<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>

この修正されたコードでは、bullet_lay によって、ショット間の遅延と next_bullet は次に許可されるショットの時間を追跡します。プレイヤーがスペースを押すと、最後のショットから十分な時間が経過したかどうかを確認します (next_bullet に基づいて)。そうであれば、箇条書きが作成され、箇条書きグループに追加されます。このタイマーは、弾丸を一度に 1 つだけ発射できるようにし、その遅延は Bullet_lay で指定されます。

以上がPygameで弾丸の同時発射を防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。