在下面的代码中,在任何给定的时间点,屏幕上都不只是一个循环。我想要修复它,使它看起来只有一个圆圈,而不是留下一个污迹,无论鼠标光标曾经在哪里。
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)发布于 2010-02-06 23:57:32
你需要明确地删除圆圈,然后再把它擦掉。根据场景的复杂程度,您可能需要尝试不同的方法。一般情况下,我所做的是有一个“背景”表面,一个blit在屏幕上每帧,然后blit的精灵/其他表面在他们的新位置(blits在游戏非常快,所以即使在相当大的屏幕,我没有速度问题这样做)。对于上面的代码,只使用surface.fill(COLOR)就足够简单了,其中COLOR是您的背景色;例如,(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)编辑在回答您的评论时说:可以通过一种更面向对象的方式来实现这一点。
您将需要一个与您的屏幕相关联的背景界面(我通常有一个显示或地图类(取决于游戏的类型)。然后,使对象成为pygame.sprite的子类。这要求您具有self.image和self.rect属性(图像是您的图面,rect是带有位置的Pygame.rect )。将所有的精灵添加到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)有关更多信息,请参见Sprite和Group类上的文档。
https://stackoverflow.com/questions/2215227
复制相似问题