Pygame显示更新故障?

时间:2018-06-05 00:22:27

标签: python python-2.7 pygame

我有一些有点时髦的代码。基本上,变量gameStart在一个变量中,该变量使用函数cursorOver,该函数查找并检测鼠标按钮的位置和按钮。我有3个按钮,当光标在按钮上时,我希望每个按钮变大。第一个按钮实现工作。但是,如果我尝试添加另一个按钮,按钮会变大,但按钮会开始闪烁。

window.blit(background,(0,0))
window.blit(title,(175,200))
pygame.draw.rect(window,PURPLE,(50,400,200,100),0)
pygame.draw.rect(window,PURPLE,(300,400,200,100),0)
pygame.draw.rect(window,PURPLE,(550,400,200,100),0)
close()

mouseX,mouseY = pygame.mouse.get_pos()
mouseClick = pygame.mouse.get_pressed()[0]

gameStartC = cursorOver(50,400,200,100,mouseX,mouseY)
instructionStartC = cursorOver(300,400,200,100,mouseX,mouseY)
objectiveStartC = cursorOver(550,400,200,100,mouseX,mouseY)
nextStartC = cursorOver(580,250,175,100,mouseX,mouseY)

if gameStartC == True:
    while True:
        pygame.draw.rect(window,PURPLE,(25,375,250,150),0)
        pygame.display.update()
        break
else:
    pygame.draw.rect(window,PURPLE,(50,400,200,100),0)
    pygame.display.update()
#this is the part where the code becomes glitchy
if instructionStartC == True:
    while True:
        pygame.draw.rect(window,PURPLE,(275,375,250,150),0)
        pygame.display.update()
        break
else:
    pygame.draw.rect(window,PURPLE,(300,400,200,100),0)
    pygame.display.update()

The image is the menu screen that I want to impliment

1 个答案:

答案 0 :(得分:2)

这只是因为您多次致电group_teacher

你应该创建一个标准的游戏循环,通常做这三件事:

  • 处理输入
  • 更新状态
  • 绘制到屏幕

然后重复。

在'绘制到屏幕' -step中,您将所有精灵/作品/任何内容绘制到屏幕表面,然后最终在结束时调用pygame.display.update()

多次调用pygame.display.update(),而不是在循环的迭代之间清除屏幕并创建多个不必要的事件循环是常见的初学者错误导致这些故障恕我直言。

所以在你的情况下,代码应该看起来更像这样:

pygame.display.update()

我不知道你期望if gameStartC: pygame.draw.rect(window,PURPLE,(25,375,250,150),0) else: pygame.draw.rect(window,PURPLE,(50,400,200,100),0) if instructionStartC: pygame.draw.rect(window,PURPLE,(275,375,250,150),0) else: pygame.draw.rect(window,PURPLE,(300,400,200,100),0) pygame.display.update() - 循环做什么,也许你应该使用pygames whileRect类。它会让你的生活更轻松。