我正在用pygame构建我的第一个更大的游戏(一个动作角色扮演游戏),当我遇到这个奇怪的bug时才开始。我运行了我的代码,标题屏幕出现了,就像正常一样,然后当我点击它时,它前进,但屏幕不会改变。直到,我最小化窗口。然后屏幕移动。它没有被冻结,因为我将一些打印功能用于调试(这也是我知道它实际上是如何进步的)
我不会把所有的代码,只是可能有问题的部分:
def ChoiceScreen():
'''choose which option the player wants'''
print('ChoiceScreen called')
SURFACE.fill(COLOURS['white'])
LabelPlay = pg.font.Font('freesansbold.ttf', 32)
PlaySurf=LabelPlay.render('New Game', True, COLOURS['black'], \
COLOURS['white'])
PlayRect = PlaySurf.get_rect()
PlayRect.center = ((WIN_X // 2), (WIN_Y // 2) - 50)
SURFACE.blit(PlaySurf, PlayRect)
#################################################################
LabelLoad = pg.font.Font('freesansbold.ttf', 32)
LoadSurf=LabelLoad.render('Load Game', True, COLOURS['black'], \
COLOURS['white'])
LoadRect = LoadSurf.get_rect()
LoadRect.center = (WIN_X // 2, WIN_Y // 2)
SURFACE.blit(LoadSurf, LoadRect)
#################################################################
LabelLoadEarlier = pg.font.Font('freesansbold.ttf', 32)
LESurf=LabelLoadEarlier.render('Load Earlier Save', True, COLOURS['black'], \
COLOURS['white'])
LERect = LESurf.get_rect()
LERect.center = (WIN_X // 2, WIN_Y // 2 + 50)
SURFACE.blit(LESurf, LERect)
while True:
for event in pg.event.get():
if event.type == QUIT:
terminate()
elif event.type==MOUSEBUTTONDOWN:
x, y = event.pos
if PlayRect.collidepoint(x,y):
print("PlayRect Clicked")
#more to come
elif LoadRect.collidepoint(x,y):
print("LoadRect Called")
elif LERect.collidepoint(x,y):
print("LERect called")
顺便说一下,COLORS(我是加拿大人)是一个字典,字符串键是RGB元组,WIN_X是800,WIN_Y是600
我使用的IDE是Sublime Text,但是我从命令提示符,IDLE,Double Clicking和visual studio执行它,所有这些都是相同的结果。我不知道该怎么做。
答案 0 :(得分:2)
您没有更新游戏循环中的屏幕(pygame.display.update()
)