gpt4 book ai didi

python - pygame - 更新得分框

转载 作者:太空宇宙 更新时间:2023-11-04 05:58:48 24 4
gpt4 key购买 nike

我正在学习使用 pygame,但在渲染文本时遇到了一些问题。

我正在使用的简化代码是这样的:

import pygame

sizex =200; sizey =200

pygame.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode((sizex,sizey))
myfont = pygame.font.Font(None, 32)

score=pygame.Rect(100,100,100,50)

screen.fill((255,255,255))
pygame.draw.rect(screen, (0,250,0), (10,10,10,10), 2)
pygame.display.update()

for i in xrange(0,1000):
msElapsed = clock.tick(2)
text="I = %d" %i
label = myfont.render(text, 1, (0,0,250))
screen.blit(label, (100, 100))

pygame.display.update(score)

我只想更新包含文本框的屏幕部分。但是这段代码并没有这样做。一段时间后,文本会自行覆盖并变得不可读。

我做错了什么?

最佳答案

问题是,当您 blit 文本时,文本的背景是透明的(请注意,这很重要,例如当您想要背景图像时)。您必须先“清除”矩形,然后再对文本进行 blit。在你的例子中,当你使用纯色作为背景时,你可以这样做:

for i in xrange(0,1000): 
msElapsed = clock.tick(2)
text="I = %d" %i
label = myfont.render(text, 1, (0,0,250))
screen.fill((255,255,255), rect=label.get_rect(topleft=(100,100)))
screen.blit(label, (100, 100))

pygame.display.update(score)

如果您使用图像而不是纯色,则必须对背景的适当区域进行 blit。

编辑:

正如 Bartlomiej 所指出的,如果新字符串比前一个字符串排序更好,它就不会被完全删除。你可能每次都清空整个屏幕,或者想办法清空你需要清空的内容,例如,存储上一个 blit 的区域:

previous_rect = None
for i in xrange(0,1000):
msElapsed = clock.tick(2)
text="I = %d" %i
if prev_rect:
screen.fill((255,255,255), rect=prev_rect)
label = myfont.render(text, 1, (0,0,250))
previous_rect = label.get_rect(topleft=(100,100))
screen.blit(label, (100, 100))

pygame.display.update(score)

关于python - pygame - 更新得分框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26259922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com