Python Pygame显示仅在我退出时更新

Python Pygame显示仅在我退出时更新,python,pygame,Python,Pygame,玩弄pygame,我不知道发生了什么。 代码应该只是制作一个红色的框,并在灰色屏幕上反弹。它可以工作,但只有当我退出显示器时 我检查了一些类似的问题,但似乎没有一个答案适用于我(这可能是错误的)。有人知道如何改进此代码吗 import pygame from pygame.locals import * from rect import * ##from pygame.font import * RED = (255, 0, 0) GRAY = (150, 150, 150) width =

玩弄pygame,我不知道发生了什么。 代码应该只是制作一个红色的框,并在灰色屏幕上反弹。它可以工作,但只有当我退出显示器时

我检查了一些类似的问题,但似乎没有一个答案适用于我(这可能是错误的)。有人知道如何改进此代码吗

import pygame
from pygame.locals import *
from rect import *
##from pygame.font import *

RED = (255, 0, 0)
GRAY = (150, 150, 150)

width = 500
height = 200

pygame.init()

screen = pygame.display.set_mode((width, height))

rect = Rect(100, 50, 50, 50)
v = [2, 2]

##moving = False
running = True

while running:
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False
   
    rect.move_ip(v)

    if rect.left < 0 or rect.right > width:
        v[0] *= -1
    if rect.top < 0 or rect.bottom > height:
        v[1] *= -1

    screen.fill(GRAY)
    pygame.draw.rect(screen, RED, rect)
    pygame.display.flip()
    
pygame.quit()
导入pygame
从pygame.locals导入*
从rect导入*
##从pygame.font导入*
红色=(255,0,0)
灰色=(150150150)
宽度=500
高度=200
pygame.init()
screen=pygame.display.set_模式((宽度、高度))
rect=rect(100,50,50,50)
v=[2,2]
##移动=错误
运行=真
运行时:
对于pygame.event.get()中的事件:
如果event.type==退出:
运行=错误
矩形移动ip(v)
如果rect.left<0或rect.right>宽度:
v[0]*=-1
如果矩形顶部<0或矩形底部>高度:
v[1]*=-1
屏幕填充(灰色)
pygame.draw.rect(屏幕,红色,rect)
pygame.display.flip()
pygame.quit()

问题似乎是程序运行太快。由于在每个循环中所做的工作很少,因此矩形的移动速度太快,无法清楚地看到发生了什么

您可以使用
pygame.time.Clock
对象限制程序的速度。在循环开始之前,可能就在屏幕定义之后,您可以构建一个时钟

clock=pygame.time.clock()

然后在主循环中,作为每次迭代的第一步(运行时紧跟在
之后:
),您可以设置
时钟。勾选(60)
,将循环限制为每秒运行60次(60fps)。这使程序运行平稳,你得到了漂亮的反弹矩形

tick
方法工作得很好,但在我的系统中,它似乎经常出现小故障。如果你也经历过这种情况,或者你想更准确一些,你可以使用
clock.tick\u busy\u loop(60)

这两种tick方法的工作方式相同:测量自上次调用
clock.tick()
以来经过的时间量,并在此基础上延迟一定的额外时间量,以便满足目标fps

有关
时钟的更多信息,请访问


我还需要导入pygame.rect,而不仅仅是导入rect,但是如果你没有收到导入错误,你应该会没事。

我已经解决了。愚蠢的是,我的测试目录中还有一个名为“rect.py”的文件,我将文件名和代码从pygame.rect import*
更改为
,现在工作正常。感谢烤土豆的帮助,让我想知道x=50,y=60,w=200,h=80左=50,顶部=60,右侧=250,底部=140中心=(150100)
是从哪里来的

你所说的“不工作”是指它的抖动和移动非常快吗?因为这就是我运行你的代码时得到的结果。在我按下退出按钮之前,黑屏不会更新为灰色,在这一点上,程序执行了我预期的操作,到目前为止,没有任何错误,并且我能够看到方块在跳动,但在按下退出按钮之前,我会看到一个黑屏,此时屏幕变为灰色,广场出现了,一切都按照它的预期发生了。谢谢你,不过我要修补一下!编辑:添加了
clock.tick(60)
,方块反弹,现在的节奏更好了,但黑色的问题仍然和以前一样screen@StillLearnin嗯,当我运行你的代码时,我没有任何类似的问题。因此,窗口会出现,是黑色的,当您按退出时会变成灰色。那么,你实际上是如何退出的呢?你必须再次按退出吗?你确定你发布了完整的代码吗?如果需要,你可以编辑你的问题。那太奇怪了!是的,这是完整的代码,是的,我必须按退出第二次,以退出窗口。谢谢你的努力@StillLearnin我看到您正在学习本教程:。前面的例子行得通吗?也许你应该在pygame.display.set_模式前后放置一个
打印(“a”)
打印(“B”)
,以确认这就是它卡住的地方。或者可能是在pygame.init()?@StillLearnin,如果它正在打印一些东西,那么看起来您仍然有一些来自第24页的代码。然后,您可能在运行循环时有另一个
pygame.init
,或者有另一个
pygame.display.set\u模式
。如果您完全按照问题中所述的方式运行代码,只需添加
时钟
,它可能会工作。