问题描述
所以我之前曾问过这个问题,但是这次我没有犯同样的错误,即在使屏幕变蓝之前调用文本循环。
def win1():
print('Level 1 completed')
global levelcount,var1,var2,clr,score,alive
myfont = pygame.font.SysFont('Comic Sans MS',100)
textsurface = myfont.render('Level 1 completed',True,(0,0))
screen.blit(textsurface,0))
for sprite in enemies:
sprite.kill()
pygame.time.wait(2800)
levelcount = 2
var1 = 700
var2 = 900
clr = (10,85,135)
myfont = pygame.font.SysFont('Comic Sans MS',100)
textsurface = myfont.render('Level 2',0))
alive = True
score = 0
该代码应该使它说“已完成1级”,但事实并非如此。这是我称之为的地方:
alive = True
while alive:
for event in pygame.event.get():
print(event)
if event.type == pygame.QUIT:
alive = False
elif event.type == ADDENEMY:
new_opponent = random.choice([Enemy(),Bomb(),Blimp()])
enemies.add(new_opponent)
all_sprites.add(new_opponent)
pressed_keys = pygame.key.get_pressed()
player.update(pressed_keys)
enemies.update()
screen.fill(clr)
for entity in all_sprites:
screen.blit(entity.surf,entity.rect)
if pygame.sprite.spritecollideany(player,enemies):
player.kill()
alive = False
death()
if levelcount == 1: #I call it here
if score > 100:
alive = False
win1()
if levelcount == 2: #this is for if you beat level 2
if score > 100:
alive = False
win2()
screen.blit(player.surf,player.rect)
pygame.display.flip()
pygame.display.update()
clock.tick(60)
我有一个死亡部分,它说“你死了”,并且可以工作,但是我在胜利部分使用了几乎相同的代码。
解决方法
您必须在 pygame.time.wait(2800)
之前用pygame.display.flip()
更新显示并通过pygame.event.pump()
处理事件:
def win1():
# [...]
pygame.display.flip()
pygame.event.pump()
pygame.time.wait(2800)
# [...]
仅当使用pygame.display.update()
或pygame.display.flip()
更新显示时,对显示 Ssurface 所做的更改才可见。
在某些系统上,必须通过pygame.event.pump()
或pygame.event.get()
处理事件,以便处理显示的重绘。处理事件可确保程序可以与操作系统的其余部分进行内部交互。