Как можно получить ограничивающие прямоугольники для каждого отдельного спрайта для таблицы спрайтов с неоднородными размерами спрайтов (т.е. синие прямоугольники на следующем рисунке / я нарисовал только несколько примеров)?
Что я хотел бы определить: offset_x, offset_y, width, height
До сих пор я использовал только спрайт-листы, на которых все спрайты имеют одинаковые размеры. В этом случае просто нужно указать смещение по x и y, чтобы получить конкретный спрайт. Однако для спрайт-листов неоднородных размеров это не работает.
РЕДАКТИРОВАТЬ: прочитав комментарии и ответы, я перефразировал мой вопрос, чтобы сделать его более инклюзивным по отношению к. фактический процесс использования таблицы спрайтов в игре. Ранее этот вопрос содержал вопросы, почему люди создают спрайт-листы неоднородных размеров и как я могу с этим справиться.
Ответы:
Большинство листов спрайтов с неидентичными измерениями обычно содержат метаданные, с которыми привязан спрайт. Есть много инструментов, которые делают такие вещи, как удаление полных альфа-пикселей и дают вам необходимые данные, чтобы эти данные не создавались вручную.
Если у вас нет этих метаданных, вы должны сами их создать. Самый точный способ - тот, который вы сказали в своем вопросе, а именно, сделать это вручную. Это может занять некоторое время, но это, вероятно, быстрее, чем создание новых спрайтов.
источник
+1
, Предоставление метаданных со спрайтами гарантированно решит их разумно .Вы можете выполнить анализ изображения, чтобы найти ограничивающие прямоугольники каждого спрайта, отсортировать эти ограничивающие прямоугольники (возможно, увеличив минимум X, затем Y), и у вас будет набор ограничивающих областей, которые соответствуют рамкам листа спрайта.
Поскольку этот процесс может быть относительно дорогим, вы, вероятно, захотите сделать это в автономном режиме, например, как часть процесса сборки для вашей игры. Затем вы можете сериализовать информацию об ограничивающей области в файл, который вы сохраняете с соответствующим изображением спрайт-листа. Во время выполнения вы загружаете как изображение, так и файл определения границ, и у вас есть информация, необходимая для доступа к каждому отдельному спрайту.
Это легче сказать, чем сделать, хотя. По сути, вы захотите сделать обнаружение функций и, в частности, обнаружение капель, которые являются проблемами машинного зрения. Вы также можете пороговое изображение (для черно-белого) и использовать метод обнаружения края . Соответствующая математика, лежащая в основе этих методов, объясняется в этих ссылках гораздо лучше, чем я, и в случае, если вы не можете самостоятельно реализовать эту математику, есть несколько доступных библиотек, которые могут вам помочь. Следующий набор ссылок показался мне наиболее перспективным:
источник
Я сделал свой собственный инструмент для такого рода неоднородных таблиц. Это позволяет редактировать смещения и так далее. Вот скриншот, чтобы дать вам идею:
источник
Проверьте пакет текстуры
http://www.texturepacker.com/
Это выводит файл как это (в зависимости от ваших предпочтительных настроек)
Используя эти данные, вы можете легко получить отдельные прямоугольники с изображения.
источник
spritebuddy.com отлично сработал для меня. Не удалось найти никакой помощи на самом сайте, но этот пост группы Google объясняет это очень хорошо. Он автоматически угадывает границы для ваших спрайтов, позволяет вам их настраивать и позволяет упорядочивать их в последовательности анимации. Затем он выдает файл метаданных для всего этого в формате JSON или XML. Затем все, что вам нужно сделать, это проанализировать этот файл данных в вашей игре, чтобы получить правильные ограничивающие прямоугольники.
источник