Bomberman v1.1

Доработал слегка управление, слегка анимацию оптимизировал. Контролы будут снизу справа (установка бомбы, взрыв и т.д). Для управления пока тачем. Если нажали левее перса, то идёт влево, если выше, то вверх и т.д. Если есть клава, то двигаться можно стрелками, а бомбу устанавливать пробелом.

Я уже писал про использование спрайтов. Реализовывал я анимацию внутри самих объектов. То есть, в итоге в каждом объекте был объект Animation, который грузил игру. Я как-то не особо сначала понял принцип работы, поэтому допустил такую ошибку. Как оказалось, анимацию то можно повесить одну всего, а в конкретных объектах менять лишь переменную состояния.

В классе, отвечающем за рендеринг создал массив анимаций различных объектов

public  Map<String,  Animation> animations = new HashMap<String,  Animation>();}

Затем надо лишь 1 экземпляр Animation для каждого объекта создать. Как пример, для npc Baloom:

private void loadBaloomAnimation(){  Texture texture  = new Texture(Gdx.files.internal("images/BalloomSprite.png"));  TextureRegion tmp[][] = TextureRegion.split(texture, texture.getWidth() / Balloom.FRAME_COLS, texture.getHeight() / Balloom.FRAME_ROWS);  TextureRegion[] textureFrames = new TextureRegion[Balloom.FRAME_COLS * Balloom.FRAME_ROWS];  int index = 0;  for (int i = 0; i < Balloom.FRAME_ROWS; i++)for (int j = 0; j < Balloom.FRAME_COLS; j++)  textureFrames[index++] = tmp[i][j];  animations.put(Balloom.Name, new Animation(2* Balloom.SPEED, textureFrames));}

При рендеринге нам нужно лишь теперь получить номер фрейма.

private void drawNpcs() {  for(NpcBase npc : world.getNpcs()){  spriteBatch.draw(animations.get(npc.getName()).getKeyFrame( npc.getAnimationState(), true), (npc.getPosition().x - cam.position.x+CAMERA_WIDTH/2)* ppuX, npc.getPosition().y * ppuY, NpcBase.SIZE * ppuX, NpcBase.SIZE * ppuY);}}

Самое главное тут — вызов метода npc.getAnimationState() у npc. Для всё того же Balloom он такой:

public float getAnimationState(){  animationState+=0.5;  switch(state){case NONE:  if(direction == Direction.LEFT)if(animationState>10)  animationState = 0;else  ...break;case DYING:  ...break;  }  return animationState;}

Если раньше для каждого объекта создавался объект анимации (то есть, если 3 врага, то 3 объекта…20 кирпичей, 20 анимаций -.-), то теперь всего 1 объект анимации для Balloom , 1 объект анимации для кирпичика.

По поводу управления. Как уже сказал, для установки бомбы надо нажать справа снизу. Движение всё так же по тачу в зависимости от положения клика относительно персонажа. Если есть клавиатура, то можно на стрелках двигаться, а пробелом ставить бомбу. В планах сделать виртуальные стрелки слева снизу…на планшетах удобно, чтоб было)

Ну и по мелочи стараюсь оптимизировать. Надо бы с музыкой что-то придумать, а то 50% веса игры — музыка =D

Сейчас в планах сделать анимацию для взрыва. Одним объектом и спрайтом не получится…думаю над реализацией)

Если кто-то хочет помочь с тестированием, можете скачать Bomberman v1.1.

Bomberman v1.1: 1 комментарий

  1. Уведомление: Bomberman v1.2: добавлена анимация взрыва | Suvitruf's Blog

Добавить комментарий

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