Pygame / Python的For循环只使精灵列表中的最后一个元素

The_cuke_of_cukes

这是我的主要问题,并简要说明了我所拥有的:我有一个名为Cat的类,并且其中有一个名为Cats的列表。经过一些随机条件后,我希望将一个新条件添加到屏幕的随机部分。

现在的事情是,如果我将屏幕涂成白色,然后使用for循环对每个元素进行blit,则for循环只会在归档屏幕后对最后一个元素进行blit。

screen = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT),0,32)
catsprite = pygame.image.load('catcit.png')
Cats = []
while True:
    screen.fill(WHITE)
    if Catspawnlimit == 0:
        if random.randint(0,50) < 10: #deciding whether a new cat is created
            newCat = Cat()     

            Cats.append(newCat) #Adding newCat to the Cats list
            Catspawnlimit = 0
    Catspawnlimit += 1

    for kitty in Cats:
        screen.blit(kitty.surface, kitty.catRect)

    pygame.display.update()

这是猫班

class Cat(object):

sizeX = 50
sizeY = 100
catRect = catsprite.get_rect() 
surface = pygame.transform.scale(catsprite, (sizeX, sizeY))

def __init__(self):
    self.posX = random.randint(0,WINDOWWIDTH/2 - self.sizeX)
    self.posY = random.randint(0, WINDOWHEIGHT-self.sizeY)
    self.catRect.topleft= (self.posX,self.posY)

谢谢你。

巴特洛米·莱万多夫斯基

您创建一个类属性catRect,每个猫对象都相同。在init函数中,将catRect移动到新位置的左上角。

要解决此问题,请制作另一个将从类1复制的矩形。

另一个提示-如果已经有存储变量的地方,请创建新变量以存储位置-矩形。考虑到这两个,这里是相关的代码:

def __init__(self):
    posX = random.randint(0,WINDOWWIDTH/2 - self.sizeX)
    posY = random.randint(0, WINDOWHEIGHT-self.sizeY)    
    self.rect = self.catRect.copy()
    self.rect.topleft = (posX,posY)

别忘了更改绘图代码以使用rect而不是catRect

for kitty in Cats:
    screen.blit(kitty.surface, kitty.rect)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章