从列表中绘制多个对象(PyGame)

2024-04-25 23:53:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python相当陌生,正在尝试为大学课程创建boid克隆。在

#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()

据我所知,它目前只绘制第一个对象三次,而不是boid(1)、boid(2)等。我尝试了如下操作:

^{pr2}$

但我不知道如何格式化它才能正常工作。 非常感谢您的帮助!在


Tags: theposselfdefrandomscreenlistclass
1条回答
网友
1楼 · 发布于 2024-04-25 23:53:03

您误解了如何创建和实例化类:

通过键入:

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

我想您应该创建3个Boid实例,并让它们的屏幕参数为screen。为此:

^{pr2}$

最终固定代码:

向列表添加对象

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()

相关问题 更多 >