У Bomberman’а теперь есть враги

Bomberman

Добавил врагов на уровне. Balloom не просто двигаются по карте, но и взаимодействуют с миром. По мимо того, что умеют обходить препятствия, они ещё и могут убить нашего персонажа.

Для начала решил логику объектов запихать в классы самих объектов. Почему-то во многих туториалах логику взаимодействий выносит на уровень контроллера, а сами объекты чисто как контейнер координат юзают. Странно это всё. Даже с точки зрения логики: игрок осматривает мир и проверяет может ли он обойти препятствие, а не мир проверяет, может ли игрок обойти стену. Конечно, понимаю, вынося всю логику на уровень контроллера, весь контроль будет в одном классе. Но мне удобнее всё же описывать взаимодействие объекта с точки зрения объекта.

Так что, теперь в классе экрана при рендеринге вызывается лишь update() контроллера:

public class GameScreen implements Screen, InputProcessor {
...
@Override
public void render(float delta) {
  Gdx.gl.glClearColor(0, 118F/255, 0, 1);
  Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

  controller.update(delta);
  renderer.render();
}

...
}

А внутри контроллера в методе по обновлению вызываю обновление всех объектов мира:

/** The main update method **/ 
public void update(float delta) {
  processInput();
  bomberman.update(delta);
  for(NpcBase npc : world.getNpcs()){
    npc.update(delta);
  }
}

Собственно, вся остальная логика запихана в сами объекты. У bomberman’а например:

public void update(float delta) {
  //проверка на проходимость по блокам
  collisionDetectionBlocks();
  //проверка на проходимость по бомбам
  collisionDetectionBombs();
  ...

  //указываем направление
  position.add(velocity.tmp().mul(delta)); 
}

На будущее:размеры спрайтов должны быть степенью двойки. Я сначала сделал просто, чтоб кратно было двум. На моём 4+ Android’е норм работало. Но на 2.2 версии вылетало с ошибкой.