gpt4 book ai didi

python - 如何摆脱pygame表面?

转载 作者:太空宇宙 更新时间:2023-11-03 13:53:37 25 4
gpt4 key购买 nike

在下面的代码中,在任何给定时间点屏幕上不仅有一个圆圈。我想解决这个问题,让它看起来只有一个圆圈,而不是在鼠标光标所在的地方留下一条污迹。

import pygame,sys
from pygame.locals import *
pygame.init()

screen = pygame.display.set_mode((640,400),0,32)

radius = 25
circle = pygame.Surface([radius*2]*2,SRCALPHA,32)
circle = circle.convert_alpha()
pygame.draw.circle(circle,(25,46,100),[radius]*2,radius)

while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()

screen.blit(circle,(pygame.mouse.get_pos()[0],100))

pygame.display.update()
pygame.time.delay(10)

最佳答案

在再次 blit 之前,您需要专门删除圆圈。根据场景的复杂程度,您可能需要尝试不同的方法。一般来说,我所做的是有一个“背景”表面,它每帧都会对屏幕进行 blit,然后将 Sprite /其他表面 blit 到它们的新位置(Pygame 中的 blit 非常快,所以即使在相当大的屏幕上我也没有速度问题这样做)。对于上面的代码,只需使用 surface.fill(COLOR) 就足够简单了,其中 COLOR 是您的背景色;例如,(255,255,255) 代表白色:

# ...
screen = pygame.display.set_mode((640,400),0,32)
backgroundColor = (255,255,255)
# ...
while True:
# ...
screen.fill(backgroundColor)
screen.blit(circle,(pygame.mouse.get_pos()[0],100))
pygame.display.update()
pygame.time.delay(10)

编辑以回答您的评论:可以以更面向对象的方式执行此操作。

您需要有一个与屏幕关联的背景 Surface(我通常有一个 Display 或 Map 类(取决于游戏类型)来执行此操作)。然后,使您的对象成为 pygame.sprite 的子类。这需要您具有 self.imageself.rect 属性(图像是您的表面,矩形是带有位置的 Pygame.rect)。将所有 Sprite 添加到 pygame.group 对象。现在,每一帧,您都调用组上的 draw 方法,并在更新显示后(即使用 pygame.display.update())调用 clear 组上的方法。此方法要求您同时提供目标表面(即上面的 screen)和背景图像。

例如,您的主循环可能看起来更像这样:

while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()

circle.rect.center = (pygame.mouse.get_pos()[0],100)
circleGroup.draw(screen)

pygame.display.update()
circleGroup.clear(screen, backgroundSurface)
pygame.time.delay(10)

参见 documentation有关 Sprite 和 Group 类的更多信息。

关于python - 如何摆脱pygame表面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2215227/

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