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