Как исправить этот дизайн?Я не могу перегрузить метод - PullRequest
0 голосов
/ 28 июня 2011

У меня есть базовый класс под названием SpriteSheet, у которого есть два дочерних элемента, RotatedSpriteSheet и FlippedSpriteSheet. SpriteSheet содержит кадры, RotatedSpriteSheet содержит эти кадры + кадры для поворотов, а FlippedSpriteSheet содержит исходные кадры + перевернутые кадры.

У меня есть другой класс под названием Sprite, который ссылается на SpriteSheet. Sprite сохраняет свою позицию, текущий кадр анимации, угол наклона, независимо от того, перевернуто изображение или нет, и т. Д. Когда Sprite обновляет свою анимацию, он выполняет вызов, подобный:

imageData = _spriteSheet.calculateFrame(animationFrame, flipped, angle);

Как видите, это довольно глупый дизайн, потому что SpriteSheet не должен иметь функцию, которая запрашивает перевернутое или угловое значение, если базовый класс SpriteSheet не использует эти данные.

Я думаю, что проблема связана с тем, что я не хочу иметь несколько объектов «Sprite», таких как RotatedSprite, AlphadSprite, FlippedSprite, FlippedAndRotatedSprite ... это кажется слишком громоздким.

Единственное решение, которое я могу придумать, состоит в том, что вместо CalculateFrame (), берущего кадр анимации, перевернутое состояние и угол, я мог бы передать ему ссылку на объект Sprite и позволить SpriteSheet (и его дочерним элементам) «проверять» Спрайт и вычислите сами данные. Проблема с этим дизайном состоит в том, что я должен был бы сделать дополнительные данные общедоступными, которые являются локальными только для спрайта (главным образом, для данных анимации). Я не думаю, что это так важно. Это лучшее решение?

Спасибо за ваши советы и предложения.

1 Ответ

1 голос
/ 28 июня 2011

Создайте отдельную иерархию Transformation, которая инкапсулирует всю необходимую информацию для преобразования спрайта или листа спрайта.

...