如何阻止多顆子彈同時發射?
在 Pygame 中,當玩家玩遊戲時,使用append()方法將多顆子彈添加到列表中射擊會導致所有子彈同時發射。為了防止這種情況,請實作一個計時器來間隔子彈的發射。
這是包含計時器的程式碼的修改版本:
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()
在此修改後的程式碼中,bullet_delay 確定射擊之間的延遲,next_bullet 追蹤下一次允許射擊的時間。當玩家按下空白鍵時,我們檢查自上次射擊以來是否已經過去了足夠的時間(基於 next_bullet)。如果是,則建立項目符號並將其新增至項目符號組。此計時器可確保一次只能發射一顆子彈,延遲時間由bullet_delay指定。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3