Pygame Game加载时冻结

时间:2014-04-17 11:36:46

标签: python pygame

我正在游戏中创建一个游戏,我希望游戏有不同的“状态”,所以当player_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 :(得分:1)

问题是while循环永远不会被破坏。当它循环时,循环之外不会发生任何事情,因此玩家y变量不能被改变,因此天空变量永远不会变为1.这基本上是一个无限循环。 我认为这可以通过用“if”替换两个“while”s来解决。 我希望这比我之前的回答更有帮助。

P.S。然后将“player_y = 390”放入“if player_y&lt; 10”语句中,在“sky = 1”下面,这样只有在背景改变时才会发生。

答案 1 :(得分: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)