为什么当玩家在pygame中与敌人碰撞时,我的游戏总是冻结



我的游戏基本上是带有坦克的太空入侵者。我已经添加了所有重要的内容,如移动和发射子弹等,但每当玩家的坦克与敌方坦克距离很近时,游戏就会冻结,当我发射子弹时也会发生同样的情况,有时它会随机工作,但这种情况非常罕见。

代码如下:

import pygame
import random

WIDTH=600
HEIGHT=600
FPS = 60
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
BLUE = (255, 0, 0)
GREEN = (48, 69, 48) 
pygame.init()

screen = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()
player_img = pygame.image.load('transparentplayer.png')
player = player_img.get_rect()
player.centerx = WIDTH // 2
player.bottom = HEIGHT - 50

enemy_img = pygame.image.load('transparent.png')
enemies = []
for i in range(3):
enemy = enemy_img.get_rect()
enemy.x = random.randint(0, WIDTH - 103)
enemy.y = -50
enemies.append(enemy)

bullet_img = pygame.image.load('transparentbullet.png')
bullets = []

direction = 'none'
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
direction = 'left'
if event.key == pygame.K_RIGHT:
direction = 'right'
if event.key == pygame.K_UP:
direction = 'up'
if event.key == pygame.K_DOWN:
direction = 'down'
if event.key == pygame.K_SPACE:
bullet = bullet_img.get_rect()
bullet.centerx = player.centerx
bullet.y = player.top
bullets.append(bullet)
if event.type == pygame.KEYUP and event.key != pygame.K_SPACE:
direction = 'none'

screen.fill(GREEN)

if direction == 'left':
if player.x > 0:
player.x -= 4
if direction == 'right':
if player.right < WIDTH:
player.x += 4
if direction == 'up':
if player.y > 0:
player.y -= 4
if direction == 'down':
if player.bottom < HEIGHT:
player.y += 4

for enemy in enemies:
enemy.y += 3
if enemy.top > HEIGHT:
enemy.y = -70
enemy.x = random.randint(0, WIDTH - 103)

for enemy in enemies:
screen.blit(enemy_img, (enemy.x, enemy.y))

for bullet in bullets:
bullet.y -= 3

for bullet in bullets:
screen.blit(bullet_img, (bullet.x, bullet.y))

temp = []
for i in range(len(bullets)):
if bullets[i].y < 0:
temp.append(i)

temp.sort(reverse=True)
for i in temp:
del bullets[i]

temp1 = []
temp2 = []
for i in range(len(bullets)):
for j in range(len(enemies)):
if bullets[i].colliderect(enemies[j]):
temp1.append(i)
temp2.append(j)
temp1.sort(reverse=True)
temp2.sort(reverse=True)


for i in temp1:
del bullets[i]
for i in temp2:
del enemies[i]

for enemy in enemies:
if player.colliderect(enemy):
pygame.image.load("gameover.PNG")
running = False


for i in range(len(temp)):
del temp[0]
for i in range(len(temp1)):
del temp1[0]
for i in range(len(temp2)):
del temp2[0]

screen.blit(player_img, (player.x, player.y))
pygame.display.update()
clock.tick(FPS)

看看你的代码,看起来你的游戏应该在你与敌人相撞时结束。唯一的问题是你没有正确地显示游戏结束图像。试着替换这个:

for enemy in enemies:
if player.colliderect(enemy):
pygame.image.load("gameover.PNG")
running = False

与这个:

for enemy in enemies:
if player.colliderect(enemy):
gameover = pygame.image.load("gameover.png")
screen.blit(gameover,(WIDTH/2 - gameover.get_width()/2, HEIGHT/2 - gameover.get_height()/2))
running = False

另外,我建议你在游戏循环开始前加载gameover图像

最新更新