如何解决Pygame显示仅在我退出时更新
摆弄pygame,不知道发生了什么。 代码只是应该制作一个红色框,然后在灰色屏幕上反弹。它有效,但仅当我退出显示时。
我已经检查了相似的问题,但似乎没有一个适用于我的答案(可能是错误的)。有谁知道如何改进此代码?
import pygame
from pygame.locals import *
from rect import *
##from pygame.font import *
RED = (255,0)
GRAY = (150,150,150)
width = 500
height = 200
pygame.init()
screen = pygame.display.set_mode((width,height))
rect = Rect(100,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.time.Clock
对象来限制程序的速度。在循环开始之前,可能恰好在屏幕定义之后,您可以构造一个时钟。
clock = pygame.time.Clock()
然后在主循环中,作为每个迭代的第一步(紧接while running:
之后),您可以放置clock.tick(60)
以将循环限制为每秒运行60次(60fps)。这样可以使程序平稳运行,并且您会看到漂亮的弹跳矩形!
tick
方法效果很好,但是在我的系统上,它似乎经常出现小故障。如果您也遇到这种情况,或者想要更加准确,可以改用clock.tick_busy_loop(60)
。
这两种滴答方法的工作方式相同:通过测量自上次调用clock.tick()
以来经过的时间,并基于此时间延迟一定的额外时间,以达到目标fps。 / p>
有关Clock
的更多信息,位于Pygame docs。
我还需要import pygame.rect
而不是import rect
,但是如果您没有导入错误,那就应该没事了。
我知道了。愚蠢的是,我在测试目录中还有一个名为“ rect.py”的文件,将文件名和代码更改为from pygame.rect import *
,现在可以正常工作了。谢谢烤土豆的帮助,也让我怀疑x=50,y=60,w=200,h=80 left=50,top=60,right=250,bottom=140 center=(150,100)
的来源!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。