我正在看这个视频https://www.youtube.com/watch?v=mhjuuHl6qHM https://www.youtube.com/watch?v=mhjuuHl6qHM通过 The Coding Train,我想:“如果我用 Python 制作它会怎么样?”我决定使用 pygame 来制作图形,因为我不擅长编码,而且也很新,所以这就是我所知道的全部。我开始着手去做。但我很快发现这对我来说是不可能的。我仍然想做视频的一部分作为挑战。他创建了一堆圆圈,给它们一个随机的速度,并让它们从屏幕中心离开。所以我创建了 100 个具有随机速度矢量的“物体”,并将它们的位置、速度和加速度放入一个列表中。它会打开一个 pygame 窗口并创建 boids,甚至更新它们的位置。不幸的是,它们的位置没有正确更新,它们变成了一团在屏幕外沿单一方向行走的圆圈。有人能帮我解决这个问题吗?
import pygame
import pygame.locals
import numpy
pygame.init()
screen = (1600, 1200)
display = pygame.display.set_mode(screen)
clock = pygame.time.Clock()
boids = []
j = 0
class Boid:
position = numpy.array([screen[0] / 2, screen[1] / 2])
velocity = numpy.array([0, 0])
acceleration = numpy.array([0, 0])
def update(self):
self.position += self.velocity
self.velocity += self.acceleration
for i in range(100):
i = Boid()
i.velocity = (numpy.random.choice([-5, -4, -3. -2. -1, 1, 2, 3, 4, 5]) * (numpy.random.random(2,)) + numpy.array([0.5, 0.5]))
boids.append(i)
#print(numpy.random.choice([-5, -4, -3. -2. -1, 1, 2, 3, 4, 5]))
print(i.position, i.velocity, i.acceleration)
while True:
j += 1
display.fill((0, 0, 0))
for n in range(len(boids)):
pygame.draw.circle(display, (255 - n, 255 - n, 255 - n), (int(boids[n].position[0]), int(boids[n].position[1])), 20)
Boid.update(boids[n])
print(n, boids[n].position, boids[n].velocity, boids[n].acceleration)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
i.update()
clock.tick(30)
pygame.display.update()
if j == 5:
pygame.quit()
exit()