Анимация в libgdx


Мне интересно, есть ли простой способ анимировать в libgdx. Я думаю об API, где я могу просто указать длительность и конечное местоположение текстуры (так же, как в библиотеке Tween Flash).

Я искал в google, и самое близкое, что я получил, был класс анимации, который есть у libgdx, который, я полагаю, требует от пользователя указать текстуру для каждого ключевого кадра.

new Animation(0.5f, texture1, texture2, texture3);
3 4

3 ответа:

Вы можете использовать TextureRegion#split(texture, tileWidth, tileHeight), чтобы получить набор текстурных областей для текстуры, если они расположены в сетке. Вы также можете использовать TexturePacker на куче свободных изображений, чтобы упаковать их в одну текстуру, а затем загрузить ее с TextureAtlas. Это имеет то преимущество, что он может удалять пробелы из каждого кадра для лучшей упаковки, а также может делать причудливые вещи, такие как алиасинг (если два кадра идентичны, он будет упакован только один раз). Название изображения кадра как anim_1.ПНГ, anim_2.png и т. д., а затем вы получите все области текстуры с именем "anim" в виде упорядоченного списка, основанного на номере кадра.

Также обратите внимание, что класс анимации в libgdx является упрощенным. Не стесняйтесь писать свои собственные, если это не соответствует вашим потребностям. Класс анимации - это всего около 20 строк кода.

Это зависит от того, какую анимацию вы хотите. Если это анимация, основанная на разных изображениях, то да, вы должны использовать класс Animation с различными областями текстуры. Однако, если вы хотите анимацию, основанную на интерполяции движения,вы должны использовать библиотеку tweening, как в Flash.

Libgdx имеет встроенный помощник Интерполятора, который позволяет создавать простые интерполяции с облегчением. Если вы хотите полный движок tweening, как Flash, посмотрите на java Универсальный Твиновский Движок .

Анимация в libgdx проста. Что я делаю, так это использую массив текстуры или textureregion в параметре анимации, а не помещаю много текстур или textureregions. И после того, как я объявляю, я затем устанавливаю режим воспроизведения анимации следующим образом - > animation.setPlayMode(Animation.PlayMode.LOOP); это работает . Я рисую анимацию, используя переменную float runTime, которая задается так: runTime += delta или runTime = runTime + delta --> spriteBatch.draw(animation.getKeyFrame(runTime), x, y, width, height);