使用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)
“开始”按钮为我闪烁。这可能只是我较慢的电脑,但是有没有办法减少或消除闪烁?在我正在做的更复杂的事情中,情况变得非常糟糕。谢谢!
每0.1秒重新绘制一次整个屏幕的内容。跟踪您实际所做的更改并只更新实际包含更改内容的矩形更常见、更快。因此,在循环之外绘制所有内容,让事件修改屏幕,并跟踪实际更改的矩形。
所以像这样的事情:
import pygame, time
pygame.init()
screen = pygame.display.set_mode((400, 300))
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))
font = pygame.font.SysFont("calibri",20)
text = font.render("Begin", True,(255,255,255))
screen.blit(text,(50,50))
loop = "yes"
counter = 0
dirty_rects = []
while loop=="yes":
pygame.display.update()
time.sleep(0.1)
# Handle events, checks for changes, etc. Call appropriate functions like:
counter += 1
if counter == 50:
font = pygame.font.SysFont("calibri",20)
text = font.render("We hit 50!", True,(255,255,255))
screen.blit(text,(50,100))
dirty_rects.append(Rect((50,100),text.get_size()))
您正在循环更新屏幕2次,一次用于绘制第一个文本(TextA
),另一次用于绘制第二个文本(Begin
)。
第一次更新后,只会显示第一个文本,因此在第一次更新和第二次更新之间看不到begin
文本。这会导致闪烁。
绘制所有内容后更新屏幕。在这种情况下,首先删除pygame.display.update()
。
我认为问题的一部分是你多次调用“pygame.display.update()”。尝试在主循环期间只调用它一次。
其他一些优化:
loop=True
而不是loop=“yes”
所以...
import pygame
pygame.init()
screen = pygame.display.set_mode((400, 300))
loop = True
# No need to re-make these again each loop.
font1 = pygame.font.SysFont("calibri",40)
font2 = pygame.font.SysFont("calibri",20)
fps = 30
clock = pygame.time.Clock()
while loop:
screen.fill((0, 0, 0), (0, 0, 400, 300))
text = font1.render("TextA", True,(255,255,255))
screen.blit(text,(0,0))
text = font2.render("Begin", True,(255,255,255))
screen.blit(text,(50,50))
pygame.display.update() # Call this only once per loop
clock.tick(fps) # forces the program to run at 30 fps.
问题内容: 我正在尝试制作一个程序,一次显示3个框。我以为,如果您为设置一个类,它将每秒显示一个新框。 所以这是我想出的代码: } 它有效,但不是我想要的方式。在上一个按ok之后,它每秒显示一个新框,而不是每秒显示一个新框。 因此,当我按下“按下”键时,它会等待1秒钟并产生一个盒子。当我按“确定”时,它会等待1秒钟并生成另一个,依此类推。知道如何使3个盒子接连产生1个吗? 问题答案: 使用JOpt
您好,我想平稳地更新seekbar,每秒钟更新一次,所以我创建了一个使用计时器的方法,每秒钟更新seekbar,但它每秒钟都在更新歌曲,我到处搜索,但没有找到解决方案,我不想使用任何处理程序,我想用这个方法修复 在这里我实现了歌曲开始时的方法 这是我的全部代码
问题内容: 我正在使用带有ajax调用的twitter typeahead(typeahead.js 0.11.1)插件,但是当ajax结果的数量小于限制(默认限制为5,我未指定)时,它会给出一些奇怪的行为在预先输入电话中)。这是我的设置方法: 导致我出现此问题的实际示例是在输入框中键入“ new to”,它返回以下json.options: 但是出现的唯一建议是“所有要添加到g1的新内容”,当所
问题内容: 我有两个表需要相同的值以实现非规范化。 这是查询。 第一张桌子 第二张桌子 如您所见,两个表之间的唯一区别是它们的名称和两个表没有该字段 无论如何将两个更新合并为一个? 问题答案: 如文档中所述,应该可以进行多表更新。 http://dev.mysql.com/doc/refman/5.5/en/update.html 注意:多表不支持LIMIT,因此根据具体情况,这可能会引起更多麻烦
我想将我的所有软件包更新到最新版本: 谢谢!!
问题内容: 在Java中,我尝试将String写入控制台。字符串的长度为20166个字符。将字符串打印到控制台后,仅出现字符串的后半部分。 整个字符串是一长行: 看起来像什么: 从一开始就有很多空格(应该是字母数字字符),然后是其余的字符串。 我试图将控制台编码从默认更改为UTF-16和UTF-8,但这没有帮助。 我要输出的字符串是从特定网页(http://docs.jquery.com/Tuto