问题描述
所以我一直在 pygame 中玩,我可以绘制并使用 update
方法来移动我的精灵,但是当我清除屏幕时,精灵会闪烁。如何在不闪烁的情况下移动精灵
代码如下:
class Sprite(pygame.sprite.Sprite):
def __init__(self,pos):
super(Sprite,self).__init__()
self.image = demon
self.rect = self.image.get_rect(center = pos)
def update(self,moveX,moveY):
self.rect.x += moveX
self.rect.y += moveY
screen.fill(BLACK)
解决方法
典型的 Pygame 应用程序循环必须:
- 通过
pygame.event.pump()
或pygame.event.get()
处理事件。 - 根据输入事件和时间(分别为帧)更新游戏状态和对象位置
- 清除整个显示或绘制背景
- 绘制整个场景(
blit
所有对象) - 通过
pygame.display.update()
或pygame.display.flip()
更新显示
删除 screen.fill(BLACK)
表单 update
:
class Sprite(pygame.sprite.Sprite):
# [...]
def update(self,moveX,moveY):
self.rect.x += moveX
self.rect.y += moveY
# screen.fill(BLACK) <--- DELETE
实现以下应用程序循环(基于您之前的问题):
while carryOn == True:
# handle events
for event in pygame.event.get():
if event.type==pygame.QUIT:
carryOn=False
# update
# [...]
# clear display
screen.fill(BLACK)
# draw sprites
all_sprites_list.draw(screen)
# update display
pygame.display.flip()
clock.tick(60)