Android: использование анимированного спрайта в libgdx

Продолжаю допиливать движок Bomberman. Реализовал анимацию на спрайтах.

Одним из пунктов реализации, как я в прошлой статье писал, является анимация. Собственно, сделал на базе спрайтов . Спрайтовая анимация(SpriteAnimation) – техника создания иллюзии движения с использованием статических изображений.

Анимация состоит из нескольких кадров, появляющихся в последовательности через определенные промежутки времени.

Собственно, изначально я просто картинку грузил как текстуру:

//создание текстуркиTexture texture = new Texture(Gdx.files.internal("images/Bomberman.png"));//прорисовкаspriteBatch.draw(texture, x, y ,sizeX, sizeY);

В дальнейшем думал, что просто буду новую текстуру создавать с новой картинкой при движении. Но, как сами понимаете, придётся в памяти тогда несколько текстурок хранить для каждой картинки. И вот тут спрайты очень выручают. Ясно, что качественной графики на спрайтах добиться сложновато (новичку), но для Bomberman’а много и не надо. Там для движения по каждому направлению всего по 3 кадра. Как юзать спрайт в libgdx?

Texture texture;//текстуркаTextureRegion[] textureFrames;  //массив текстур для хранения кадров по отдельностиAnimation   walkAnimation;  //объект анимации//создаётся текстура из файлаtexture  = new Texture(Gdx.files.internal("images/BombermanSprite.png"));//получаем 2-ый массив кадров из текстуры. Стоит отметить, что размеры кадров одинаковые должны быть, а то нарежет кривоTextureRegion tmp[][] = TextureRegion.split(texture, texture.getWidth() / FRAME_COLS, texture.getHeight() / FRAME_ROWS);textureFrames = new TextureRegion[FRAME_COLS * FRAME_ROWS];int index = 0;for (int i = 0; i < FRAME_ROWS; i++)  for (int j = 0; j < FRAME_COLS; j++)textureFrames[index++] = tmp[i][j];//создание анимации. Первый параметр указывает на длительность каждого кадра. Второй параметр - массив кадровwalkAnimation = new Animation(SPEED, textureFrames); 

Я это всё дело запилил в конструктор модели бомбермена. И создал метод для получения текущего кадра:

public TextureRegion getCurrentFrame(){  TextureRegion curFrame;  if(state == State.WALKING)  {curState+=0.5;switch(direction){  case LEFT:...break;  case RIGHT: ...break;  case DOWN: ...break;  case UP: ...break;}//второй параметр указывает на то, что анимация зацикленаcurFrame = walkAnimation.getKeyFrame(curState, true);return curFrame;}

В итоге анимация движения идентична той, что была в оригинальной игре =3

Android: использование анимированного спрайта в libgdx: 3 комментария

  1. Уведомление: Bomberman v1.1 | Suvitruf's Blog

  2. Dmitriy

    Здесь показана реализация анимации с помощью TextureRegion,но как ее реализовать если используешь TextureAtlas ??

Добавить комментарий для Dmitriy Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *