复制精灵

时间:2020-10-15 17:46:37

标签: python pygame

我在添加新的精灵时遇到麻烦。我正在寻找符合以下条件的东西:

def duplicate(sprites):
    for d in sprites:
        if d.energy >= d.max_energy * 0.9:
            d.energy = d.energy / 2
            new_d = d.duplicate()

因此,如果1个精灵的“能量”超过其“ max_energy”的90%,则其能量将减少一半,现在将有第二个精灵与第一个相同。我不确定如何实现这一目标。

1 个答案:

答案 0 :(得分:3)

通常,您需要实现duplicate方法并在该方法中构造 Sprite 对象的新实例。

另一种解决方案是使用Python copy模块。 deepcopy可以创建对象的深层副本。不幸的是,这不能用于pygame.sprite.Sprite对象,因为image属性是pygame.Surface,不能被深深地复制。因此, Sprite deepcopy会导致错误。
除非您也没有需要深度复制的任何其他属性,否则可以使 Sprite 的浅copyrect属性是pygame.Rect对象。 Sprite 的副本需要自己的矩形,因此您必须生成一个新的矩形实例。幸运的是,pygame.Rect.copy可以复制一个pygame.Rect对象:

import copy
new_d = copy.copy(d)
new_d.rect = d.rect.copy()