Что-то в вашем AnimatedSprite
мешает его подвижности. Как только это устранено, оно пытается скопировать. И вы получите свою ошибку.
Возможно, что-то в Sprite
блокирует его перемещение. Или что-то в Timer
; =default
может стать =delete
, если вы не можете переместить вещь.
Одна из техник, которую я использую, заключается в том, чтобы ввести stati c о таких предположениях.
static_assert( std::is_move_assignable<Sprite>{}, "Cannot move Sprite" );
static_assert( std::is_move_constructible<Sprite>{}, "Cannot move Sprite" );
static_assert( std::is_move_assignable<Timer>{}, "Cannot move Timer" );
static_assert( std::is_move_constructible<Timer>{}, "Cannot move Timer" );
Теперь, используя мой я вижу:
const unsigned expirationTime_;
заблокирует назначение перемещения на Timer
.
Резервное копирование в дизайн:
sprite_ = AnimatedSprite( graphics, "Resource/NpcSym.png", 0, 1, 16, 16, 50, 5 );
делает это имеет смысл назначить один текущий анимирующий спрайт поверх другого?
Я сомневаюсь в этом.
Я бы =delete
operator=(&&)
.
Заменить sprite_
с std::optional<AnimatedSprite>
и выполните:
sprite_.emplace( graphics, "Resource/NpcSym.png", 0, 1, 16, 16, 50, 5 );
, что часто намного более разумно, чем наличие "спрайта, который находится в состоянии, которое не является спрайтом".