Дублирование спрайта

avatar
taijifajin
15 октября 2020 в 17:46
297
1
2

У меня проблемы с добавлением новых спрайтов. Я ищу что-то вроде:

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 спрайта была «энергия» выше 90% от его «max_energy», его энергия была бы сокращена вдвое, и теперь был бы второй спрайт, идентичный первому. Хотя я не знаю, как это осуществить.

Источник

Ответы (1)

avatar
Rabbid76
15 октября 2020 в 18:37
2

В общем случае вам необходимо реализовать метод duplicate и создать новый экземпляр объекта Sprite в методе.

Другое решение — использовать модуль Python copy. deepcopy может создать глубокую копию объекта. К сожалению, это нельзя использовать для объектов pygame.sprite.Sprite, так как атрибут image является pygame.Surface, который нельзя глубоко скопировать. Следовательно, deepcopy из Sprite вызовет ошибку.
Если у вас нет какого-либо другого атрибута, который необходимо копировать глубоко, вы можете сделать неглубокий copy из Sprite. Атрибут rect — это объект pygame.Rect. Копия Sprite нуждается в собственном прямоугольнике, поэтому вам нужно сгенерировать новый экземпляр прямоугольника. К счастью, объект pygame.Rect можно скопировать с помощью pygame.Rect.copy:

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