Анимация в libgdx
Мне интересно, есть ли простой способ анимировать в libgdx. Я думаю об API, где я могу просто указать длительность и конечное местоположение текстуры (так же, как в библиотеке Tween Flash).
Я искал в google, и самое близкое, что я получил, был класс анимации, который есть у libgdx, который, я полагаю, требует от пользователя указать текстуру для каждого ключевого кадра.
new Animation(0.5f, texture1, texture2, texture3);
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);