Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame显示更新故障?_Python_Python 2.7_Pygame - Fatal编程技术网

Python Pygame显示更新故障?

Python Pygame显示更新故障?,python,python-2.7,pygame,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,1

我有一些代码有点怪。基本上,变量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()

这只是因为您多次调用了
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()
我不知道你期望
while
-循环做什么,也许你应该使用pygames
Rect
Sprite
类。这会让你的生活更轻松