1

したがって、長方形のランダムなプロパティを作成する Rectangle という名前のクラスの 10 個のインスタンスを追加することになっているプログラムがあります。リストから複数のオブジェクトを印刷すると、それらは異なる値として表示されますが、複数に対して持っている描画関数を呼び出すと、画面に表示されるのは 1 つだけです。

コード全体は次のとおりです。http://pastebin.com/hb6LBjss

ここで重要なコードは次のとおりです。1 つ目は矩形クラス、2 つ目は空のリストに矩形を 10 回追加するもの、3 つ目はメイン プログラム ループ内にあり、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()

このようなさまざまなことを試してみましたが、画面に四角形が1つしかありません。

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

1 に答える 1

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メソッドは、オブジェクトのインスタンスを構築するときに呼び出されます。デフォルトでは、これは何もしません。初期化子ではなく、これらすべての変数/メンバーを基本クラスに書き込んだため、クラスのすべてのインスタンスは、インスタンスメンバーではなくクラスメンバーになったため、すべての変数/メンバーに対して同じ値を持ちました...

于 2013-04-03T11:48:03.467 に答える