我可以添加一个类,在列表中绘制一个表面来绘制它多次,并在表面离开屏幕后不通过从列表中删除它来绘制 &



我创建了一个类,它具有在屏幕上绘制表面的功能,现在我想将其添加到列表中并多次绘制,但也要在它越过屏幕后将其从列表中删除

import pygame
pygame.init()
screen=pygame.display.set_mode((1000,600))
obs_list=[]
class obstacle():
def __init__(self):
self.surface=pygame.surface.Surface((50,50))
self.rect=self.surface.get_rect(center=(500,300))
def draw(self,screen):
screen.blit(self.surface,self.rect)
self.move()
def move(self):
self.rect.centerx+=2
def remove(self):
if self.rect.centerx>=800:
obs_list.remove(self)
while True:
for event in pygame.event.get():
if event.type==pygame.QUIT:
pygame.quit()
screen.fill('white')
obs_list.append(obstacle())
for obs in obs_list:
obs.draw(screen)
pygame.display.flip()

我这样做了,但它就像是在屏幕上拖动正方形,留下痕迹,我不知道发生了什么,如果我做错了,或者不使用sprite就不能做我想做的事情

由于在应用程序循环中将障碍追加到obs_list,因此该列表将继续增长。并且在每一帧中都绘制出列表中过去所有帧中的所有障碍。您必须在应用程序循环之前,而不是在应用程序循环中,将障碍物附加到列表中:

obs_list.append(obstacle())                    # <--- insert
while True:
for event in pygame.event.get():
if event.type==pygame.QUIT:
pygame.quit()
screen.fill('white')
#obs_list.append(obstacle())                 <--- delete
for obs in obs_list:
obs.draw(screen)
pygame.display.flip()

最新更新