【问题标题】:PyGame - How to move many sprites at the same time? [closed]PyGame - 如何同时移动多个精灵? [关闭]
【发布时间】:2017-02-01 22:52:13
【问题描述】:

使用 PyGame,我在太空侵略者风格的游戏中为外星人创建了一个精灵组。

我的问题是如何让外星人同时移动? Alien 的每个实例都存储在一个列表中。

【问题讨论】:

  • 用小“步”将列表中的每个外星人一个接一个地移动。之后你从头开始。如果你在循环(mainloop)中重复它,那么它看起来就像所有外星人同时移动。
  • 顺便说一句:如果外星人将具有update() 的功能并且您将保留在grp = pygame.sprite.Group 中,那么您只需要`grp.update()

标签: python list python-3.x animation pygame


【解决方案1】:

用小“步”移动列表中的每个外星人。之后你从头开始。如果你在循环(主循环)中重复它,那么它看起来就像所有外星人同时移动。

# mainloop

while True:

   # events
   # ....

   # updates

   for aline in aliens_group:
       alien.rect.x += 1 # small move
       # or 
       alien.update() # function have to do small move

   # draws
   # ...

顺便说一句:如果外星人将具有update() 的功能并且您将外星人保留在pygame.sprite.Group 中,那么您只需要group.update()

class Alien:

     def update(self):
         self.rect.x += 1 # small move

# init

aliens_group = pygame.sprite.Group()

alien_1 = Alien()
alien_2 = Alien()

aliens_group.app(alien_1, alien_2)

# mainloop

while True:

   # events
   # ....

   # updates

   aliens_group.update() # function have to do small move

   # draws

   aliens_group.draw()

【讨论】:

  • 干得好 :) 你的代码很简洁,而且描述性强。我唯一建议的是map 函数,这是我回答的要点。使用迭代要慢得多。在任何情况下,map 函数都是很好的做法:) 总的来说,你的代码看起来不错:D
  • @CoolqB pygame.sprite.Group() 甚至比map 更好
  • 好吧,让我们计时,你的代码需要多长时间?我给我计时了,它花了...... 0.0 秒:P 我使用了 cProfile。 :)
  • @CoolqB 我不知道pygame.sprite.Group() 的速度有多快,但它使用了用C/C++ 编写的SDL 库中的函数,所以它可以很快。但它更好,因为它可以与函数一起使用来检测精灵之间的碰撞 - 所以它还有其他优点:)
  • 好的,谢谢。 :)
【解决方案2】:

好的,假设您在列表中有外星人的位置,您可以使用map 函数:

aliens = [[0,0],[5,9],[5,2]] # Three aliens in list, these are their X,Y coords.

def move_alien_right(alien):
    alien[0] += 1
    return alien

aliens = list(map(move_alien_right,aliens))

print(aliens)

map 函数非常快,所以如果你有一大群外星人,它应该可以很好地工作。

谢谢:)

【讨论】:

  • 我有一个列表中每个外星人的矩形值。那么这仍然有效吗?
  • 一个 Pygame 矩形?如果是这样的话,我可以编辑我的答案:)
  • 为什么投反对票?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多