2017-02-21 10 views
0

私は、Pythonには新しく、大学コースのためにボイドクローンを作成しようとしています。リストから複数のオブジェクトを描画する(PyGame)

#the class 
class Boid: 
    def __init__(self, screen): 
     self.screen = screen 
     self.pos = Vector2D(random.randrange(400), random.randrange(400)) 
     self.rad = 20 
     self.speed = Vector2D(-4, -4) 

    def draw(self): 
     py.draw.circle(self.screen, (255,50,50), (self.pos.x, self.pos.y), self.rad) 

# adding objects to a list 
self.boid = Boid(self.screen) 
self.boid1 = Boid(self.screen) 
self.boid2 = Boid(self.screen) 
self.boidlist = [self.boid, self.boid1, self.boid2] 

#in the game loop, drawing from list 
for boid in boidlist: 
    boid.draw() 

私は理解しているように、それは現在だけで三回最初のオブジェクトを描画し、(1)、BOID(2)、などBOIDない私のような何かやってみました:

for i in range(3): 
    boid(i).draw() 

をしかし、私はすることができますエラーなく動作するようにフォーマットする方法を理解していない。 多くのご協力をいただきました!

+0

([最小限の、完全な例]を投稿してくださいリストにオブジェクトを追加するhttp://stackoverflow.com/help/ mcve)と完全なトレースバック。他のクラスの中にインスタンス化コードがありますか? – skrx

+0

入力いただきありがとうございます。はい、インスタンシエーションコードはゲームのメインクラス自体の中にありますが、私はそれをいくつかの微調整をしてC ._の解決策で動作させることができました。 – K0i

+0

完全な例を投稿する必要があります。 'boidlist'を' self.boidlist'に変更するだけでした。 – skrx

答えて

0

あなたはクラスを作成してインスタンス化する方法を誤解している:私はあなたがBOIDの3つのインスタンスを作成したいと思うし、その画面の引数はscreenも持って

self.boid = Boid(self.screen) 
self.boid1 = Boid(self.screen) 
self.boid2 = Boid(self.screen) 

を:

入力すると。これを行うには:

boid = Boid(screen) # 'self.' is only when you create the class 
boid1 = Boid(screen) 
boid2 = Boid(screen) 

最終固定コード:

boid = Boid(screen) # 'self.' is only when you create the class 
boid1 = Boid(screen) 
boid2 = Boid(screen) 

boidlist = [boid, boid1, boid2] 

#in the game loop, drawing from list 
for boid in boidlist: # This should now work correctly 
    boid.draw() 
関連する問題