繁体   English   中英

Pygame 显示仅在我退出时更新

[英]Pygame display only updates when I quit

摆弄 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.time.Clock对象限制程序的速度。 在循环开始之前,可能就在屏幕定义之后,您可以构建一个时钟。

clock = pygame.time.Clock()

然后在您的主循环中,作为每次迭代的第一步(在while running:之后clock.tick(60)您可以将clock.tick(60)限制为每秒运行 60 次 (60fps)。 这使程序运行顺利,您将获得漂亮的弹跳矩形!

tick方法效果很好,但在我的系统上,它似乎每隔一段时间就会出现小故障。 如果您也遇到过这种情况或者想要更准确,可以改用clock.tick_busy_loop(60)

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

Pygame 文档中有关Clock更多信息。

我还需要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)来自!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM