10个矩形的列表,用于绘制每个矩形,仅绘制一个

时间:2013-04-03 11:39:39

标签: python pygame

所以我有一个程序,它应该附加一个名为Rectangle的类的10个实例,它为矩形创建随机属性。 如果我从列表中打印多个对象,它们会显示为不同的值,但如果我调用绘图函数我有多个,则屏幕上只显示一个。

以下是整个代码:http://pastebin.com/hb6LBjss

这里的代码的重要部分是这些,第一个是矩形类,第二个是将一个矩形附加到空列表10次,第三个是在主程序循环中,并且应该绘制所有10个。

感谢。

1

class Rectangle():
    x = random.randrange(0, 701)
    y = random.randrange(0, 501)
    width = random.randrange(20,71)
    height = random.randrange(20,71)
    change_x = random.randrange(-3,4)
    change_y = random.randrange(-3,4)
    def move(self):
        self.x += self.change_x
        self.y += self.change_y
    def draw(self):
        pygame.draw.rect(screen, green, [self.x,self.y, self.width, self.height], 0)

2

myList = []

for i in range(10):
    myList.append(Rectangle())

3

for i in myList:
    i.draw()

我尝试了很多不同的东西,比如这个,但每次屏幕上只有一个矩形。

for i in range(10):
    x = myList[i]
    x.draw()

1 个答案:

答案 0 :(得分:2)

你实际上绘制了10个矩形,但它们都是相同的。

您尚未传递要绘制的矩形类的实例,而是传递类本身。

这很容易解决。

class Rectangle():
    x = random.randrange(0, 701)
    y = random.randrange(0, 501)
    width = random.randrange(20,71)
    height = random.randrange(20,71)
    change_x = random.randrange(-3,4)
    change_y = random.randrange(-3,4)
    def move(self):
        self.x += self.change_x
        self.y += self.change_y
    def draw(self):
        pygame.draw.rect(screen, green, [self.x,self.y, self.width, self.height], 0)

变为:

class Rectangle():
    def __init__(self):
        self.x = random.randrange(0, 701)
        self.y = random.randrange(0, 501)
        self.width = random.randrange(20,71)
        self.height = random.randrange(20,71)
        self.change_x = random.randrange(-3,4)
        self.change_y = random.randrange(-3,4)

    def move(self):
        self.x += self.change_x
        self.y += self.change_y

    def draw(self):
        pygame.draw.rect(screen, green, [self.x, self.y, self.width, self.height], 0)

在构造对象的实例时调用init方法,默认情况下,这不执行任何操作。由于您将所有这些变量/成员写入基类,而不是初始化程序,因此该类的每​​个实例对所有变量/成员都具有相同的值,因为它们成为类成员,而不是实例成员......