【问题标题】:Moving Sprite groups移动精灵组
【发布时间】:2013-12-10 11:19:36
【问题描述】:

我一直在为 Sprite Groups 阅读 Pygame documentation,在其 sprites 部分它说:

这些组的设计旨在提高删除和添加的效率 精灵给他们。它们还允许进行廉价测试以查看 Sprite 是否 已存在于组中。一个给定的 Sprite 可以存在于任意数量的 团体。游戏可以使用一些组来控制对象渲染,并且 一组完全独立的组来控制交互或玩家 movement. 而不是将类型属性或布尔值添加到派生的 Sprite 类,考虑将 Sprites 保存在有组织的 Groups 中。 这将允许在游戏后期更轻松地查找。

我的目标是让精灵组移动,但我在网上找不到任何示例。是否可以移动精灵组中的所有或部分单独的精灵,如果可以,如何?

【问题讨论】:

    标签: python pygame


    【解决方案1】:

    要移动Group 中的所有Sprites,只需使用简单的for 循环:

    for spr in my_sprites_that_shall_move:
        spr.rect.move_ip(d_x, d_y)
    

    Group 类不包含任何功能来控制其Sprites 的移动

    【讨论】:

    • 太棒了,但是如果你想从组中获取一个单独的精灵并只移动它。
    • 在大多数情况下,您不会直接使用move_ip(dx, dy),而是设置一个sprite.update() 函数,根据精灵的速度移动精灵。
    • @Pro-grammer 因为你可以遍历Group,所以你可以采用Sprite,如果它在任何其他集合中,你可以按照你想要的方式访问它(我希望这句话使感觉)。例如first_sprite = next(my_sprite_group)next(spr for spr in my_group if spr.some_flag).
    • @MarcusMøller 是的,但我希望这只是一个示例,表明您可以遍历 Group 来访问精灵。如果您只想在每个精灵上调用update(),您只需在组本身上调用update()
    • @DominicKexel 哦,评论只是针对 Pro-grammer。想告诉他,如果他做了速度(并为每个精灵单独更改它们),那么他不必担心移动单个精灵,因为他可以对所有精灵调用 sprite.update()。