libGDX - странное рисование TextureRegion при масштабировании

Возникла странная проблема.

У меня есть Текстура с четырьмя кадрами анимации спрайта. Каждый кадр загружается как TextureRegion.

Большую часть времени анимация воспроизводится без каких-либо проблем, но иногда она рисует слишком много текстуры в одном кадре.

Вот пример того, что я имею в виду:

Как вы можете видеть, у НЛО есть красная полоса с левой стороны. Эта красная полоса является частью рамки снаружи границ TextureRegion, указанных в моем коде. (Красная рамка предназначена для того, чтобы мне было легче ее измерить, поскольку на всех углах прозрачность)

Вот текстура:

В приведенном выше листе спрайта красная рамка для слайда в верхней части имеет границы 0, 0, 202, 71. TextureRegion для рамки анима - 1, 1, 200, 69 - ни в коем случае не должен красная рамка будет отображаться, насколько я могу судить.

В качестве обходного пути я понимаю, что теперь я могу просто установить прозрачную рамку, когда у меня есть нужные измерения, но я бы хотел оставить красную рамку на случай, если мне понадобится выполнить измерения позже, или заменить спрайтовые изображения и т. Д. и на самом деле обходной путь - это просто пластырь, в то время как я надеюсь найти правильное решение, чтобы устранить корень проблемы - тот факт, что он рисует неправильно, указывает на большую проблему, чем в данном конкретном случае. (например, в плотно упакованной текстуре он может рисовать пиксели из другого фрейма спрайта или даже из другого спрайта или изображения меню или чего-то в этом роде).

Да, и последнее замечание, если это полезно: когда SpriteBatch отображает изображение, оно применяет вращение, основанное на движении НЛО (наклоняется влево при движении влево и т. Д.). Глючные красные столбцы иногда появляются сверху, справа, снизу или слева в случайном порядке (хотя в большинстве случаев они вообще не отображаются), однако они появляются только тогда, когда НЛО имеет поворот на ноль. (Опять же, я понимаю, что мог бы просто включить проверку, чтобы увидеть, является ли вращение 0, а затем вызвать метод SpriteBatch.draw () без значения поворота, но это также будет лечить симптом, а не устранять причину проблемы).

Есть мысли от учёных мастеров?

1 ответ

Решение

Ваши кадры анимации должны быть заполнены вокруг них, чтобы учесть ошибку округления. Поместите два пикселя прозрачных пикселей вокруг каждого изображения. Если вы используете TexturePacker для объединения изображений в ваш файл, он автоматически добавит два пикселя отступа по умолчанию.

Если вы называете свои четыре изображения суффиксом номера подчеркивания, например myAnimation_0.png, myAnimation_1.png, myAnimation_2.png и myAnimation_3.png, то при загрузке TextureAtlas это позволяет очень легко получить анимацию.

Array<TextureRegion> myAnimationFrames = textureAtlas.findRegions("myAnimation");
Другие вопросы по тегам