微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pygame显示仅在我退出时更新

如何解决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 举报,一经查实,本站将立刻删除。