Pygame游戏在加载时冻结
我正在用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" 下面,这样只有在背景变化的时候才会执行这个操作。