Pygame游戏在加载时冻结

2 投票
2 回答
744 浏览
提问于 2025-04-18 03:07

我正在用pygame制作一个游戏,我想为游戏设置不同的“状态”。比如当玩家的y坐标小于10时,背景会改变,屏幕上的敌人也会变化。但是每次我尝试启动游戏时,它都会卡住,无法加载。不过当我没有加入“状态”变化的代码时,游戏就能正常启动。

我的游戏变量:

black    = (   0,   0,   0)
white    = ( 255, 255, 255)
red      = ( 255,   0,   0)
background_image = pygame.image.load("background.png")
player_y = 20
y_speed = 0
obj_speed = 0.5
sky = 0
player_x = 50

我的“状态变化代码”:

while sky == 0:
    screen.blit(pygame.image.load("background.png"), [0,0])
    all_sprites_list.draw(screen)
    if player_y < 10:
        sky == 1
while sky == 1:
    player_y = 390
    screen.blit(pygame.image.load("sky.png"), [0,0])
    player_list.draw(screen)
    wof_list.draw(screen)

编辑:http://pastebin.com/5Vj6vjBJ 这是完整代码的pastebin链接。

2 个回答

0

问题在于你的 if player_y < 10: 这行代码里,你并没有真正改变 sky 的值,而只是检查了 sky 是否等于 1。你可以这样修改:

if sky == 0:
    screen.blit(pygame.image.load("background.png"), [0,0])
    all_sprites_list.draw(screen)
    if player_y < 10:
        sky = 1
if sky == 1:
    player_y = 390
    screen.blit(pygame.image.load("sky.png"), [0,0])
    player_list.draw(screen)
    wof_list.draw(screen)
1

问题在于这个 while 循环一直没有结束。在循环进行的时候,循环外面的事情都无法发生,所以玩家的 y 变量无法改变,因此 sky 变量也永远不会变成 1。这基本上就是一个无限循环。

我觉得可以通过把两个 "while" 改成 "if" 来解决这个问题。

希望这比我之前的回答更有帮助。

附言:然后把 "player_y = 390" 放到 "if player_y < 10" 这个条件语句里,放在 "sky = 1" 下面,这样只有在背景变化的时候才会执行这个操作。

撰写回答