Доработал слегка управление, слегка анимацию оптимизировал. Контролы будут снизу справа (установка бомбы, взрыв и т.д). Для управления пока тачем. Если нажали левее перса, то идёт влево, если выше, то вверх и т.д. Если есть клава, то двигаться можно стрелками, а бомбу устанавливать пробелом.
Я уже писал про использование спрайтов. Реализовывал я анимацию внутри самих объектов. То есть, в итоге в каждом объекте был объект 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.2: добавлена анимация взрыва | Suvitruf's Blog