这是我的主要问题和对我所拥有的内容的简要说明: 我有一个名为Cat的类,以及一个名为Cats的列表。在一些随机条件之后,我想要将新的一个添加到屏幕的随机部分。
现在就是这样,如果我将屏幕画成白色,然后我使用for循环来对每个元素进行blit,for循环只会在提交屏幕后将最后一个元素搞定。
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)
谢谢。
答案 0 :(得分:0)
您创建了一个类属性catRect,它对每个cat对象都是相同的。在init函数中,移动catRect使topleft位于新位置。
要解决此问题,请制作另一个将从第一类复制的矩形。
另一个提示 - 如果您已经有一个存储位置 - 矩形,请创建新的变量来存储位置。考虑到这两点,这里是相关的代码:
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)