Добавил врагов на уровне. 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 версии вылетало с ошибкой.