我正在游戏中创建一个游戏,我希望游戏有不同的“状态”,所以当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链接。
答案 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)