使用PyGame,我得到了闪烁的东西 . 盒子,圆圈,文字,它都闪烁着 . 我可以通过增加循环之间的等待来减少这种情况,但是我可能可以通过立即将所有内容绘制到屏幕来消除它,而不是单独执行所有操作 . 以下是我遇到的一个简单示例:
import pygame, time
pygame.init()
screen = pygame.display.set_mode((400, 300))
loop = "yes"
while loop=="yes":
screen.fill((0, 0, 0), (0, 0, 400, 300))
font = pygame.font.SysFont("calibri",40)
text = font.render("TextA", True,(255,255,255))
screen.blit(text,(0,0))
pygame.display.update()
font = pygame.font.SysFont("calibri",20)
text = font.render("Begin", True,(255,255,255))
screen.blit(text,(50,50))
pygame.display.update()
time.sleep(0.1)
“开始”按钮对我来说是闪烁的 . 它可能只是我较慢的电脑,但有没有办法减少或消除闪烁?在我正在研究的更复杂的事情上,它变得非常糟糕 . 谢谢!
4 回答
Pygame有一个缓冲系统来避免闪烁,所以你应该像你一样绘制它们,但最后只更新一次:
如果你不想保持帧速率,Pygame有一个比time.sleep(0.1)好的Clock Class .
我认为问题的一部分是你多次调用'pygame.display.update()' . 在主循环期间尝试只调用一次 .
其他一些优化:
您可以从主循环中取出字体创建代码以加快速度
做
loop = True
而不是loop = "yes"
要获得更一致的fps,可以使用Pygame的clock类
所以...
您将在循环中更新屏幕2次,一次用于绘制第一个文本(
TextA
),另一个用于第二个文本(Begin
) .首次更新后,仅显示第一个文本,因此您无法在第一次更新和第二次更新之间看到
begin
文本 . 这会导致闪烁 .在绘制完所有内容后更新屏幕 . 在您的情况下,请先删除
pygame.display.update()
.您每0.1秒重绘整个屏幕的内容 . 跟踪实际所做的更改并更新实际包含更改内容的rects更为常见和快捷 . 因此,绘制循环外的所有内容,让事件修改屏幕并跟踪实际更改的矩形 .
所以这样的事情: