WFE for LibGDX
от Death
Вспомогательная библиотека к LibGDX 1.6.0.
Используется Java 8.
Добрый день. Сегодня рассмотрим WFE for LibGDX ближе. Скачать главный модуль можно с форума.
Создание приложения
Будем делать игру с использованием модуля карты. Цель игры - собрать все ящики с рыбой на карте.
Создадим новый проект и подключим WFE_LibGDX.jar и libGDX(мой сборник библиотек на spaces)
В главном классе:
Так как нет класса TestMap, значит, создадим его, унаследуем от ScreenGame(WFE) и реализуем абстрактные методы.
Запустим проект и увидим только окно 600 на 600. Закрываем окно.
Будем добавлять карту. Скачать файл карты можно с форума или сделать свою в редакторе. Использую этот тайлсет.
Пишем волшебные строчки и получаем:
Тайлсет нужно положить рядом картой.
Запустим... Карта отображается.
Добавим объект:
Запустим и увидим 20 на 20 пикселей объект.
Теперь сделаем, так чтобы он подбирал ящики с рыбой.
Ну и сделаем так, чтобы камера следовала за игроком.
Мы знаем что id тайла рыбы равно 57, значит используем это.
Метод интерфейса CollisionWall вызывается, когда происходит столкновение со стеной.
Запустим... Ящики собираются. Всё работает.
Добавим счетчик
Строчка maxNum = map.getLayer("wall").getNymId(id); вернёт нам количество тайлов с равным id.
Нашлась опечатка. На время написание статьи getNymId, но дальше будет как getNumId.
Сделаем так чтобы нас оповестили о том, что мы всё собрали.
Метод showInfo отображает строку.
Ну и добавим мы отображение своё.
Ну и, наконец, допишем наш игровой класс
Метод render() будет вызываться после draw(Batch), если вам нужно что-то сделать перед рисованием, то используйте update().
Исходник:
Форум
Используется Java 8.
Добрый день. Сегодня рассмотрим WFE for LibGDX ближе. Скачать главный модуль можно с форума.
Создание приложения
Будем делать игру с использованием модуля карты. Цель игры - собрать все ящики с рыбой на карте.
Создадим новый проект и подключим WFE_LibGDX.jar и libGDX(мой сборник библиотек на spaces)
В главном классе:
- public static void main(String[] args) {
- new MainGameManager("TestMap", 600, 600, new TestMap()).start();
- }
Так как нет класса TestMap, значит, создадим его, унаследуем от ScreenGame(WFE) и реализуем абстрактные методы.
- public class TestMap extends ScreenGame{
- @Override
- public void init(){
- }
- @Override
- public void draw(Batch batch){
- }
Запустим проект и увидим только окно 600 на 600. Закрываем окно.
Будем добавлять карту. Скачать файл карты можно с форума или сделать свою в редакторе. Использую этот тайлсет.
Пишем волшебные строчки и получаем:
- public class TestMap extends ScreenGame{
- TiledMap map;
- @Override
- public void init(){
- LoadTiledMap load = new LoadTiledMap("./map.bin");
- map = load.load();
- }
- @Override
- public void draw(Batch batch){
- map.draw(camera);
- }
Запустим... Карта отображается.
Добавим объект:
- TiledObject ob;
- ...
- ob = new TiledObject();
- ob.setSprite(new Sprite(new Texture(Gdx.files.local("./tiled.png"))));//Не буду заморачиваться с графикой объекта
- ob.setSize(20, 20);
- ob.initPhysics(map, map.getLayer("wall"));//Инициализируем физику объекта. Передаём ему карту и уровень с которым нужно проверять столкновение
- ob.setPosition(10, 10);
- map.getLayer("ground").addObject(ob);//Добавим объект на карту
Запустим и увидим 20 на 20 пикселей объект.
Теперь сделаем, так чтобы он подбирал ящики с рыбой.
Ну и сделаем так, чтобы камера следовала за игроком.
- @Override
- public void draw(Batch batch){
- map.draw(camera);
- camera.position.x = ob.getX();
- camera.position.y = ob.getY();
- map.processinExitBorder(camera);//Метод делает так, чтобы границы карты не были видны.
- int speed = 4;
- if(Gdx.input.isKeyPressed(Keys.W)){
- ob.moveY(speed);
- }
- if(Gdx.input.isKeyPressed(Keys.S)){
- ob.moveY(-speed);
- }
- if(Gdx.input.isKeyPressed(Keys.D)){
- ob.moveX(speed);
- }
- if(Gdx.input.isKeyPressed(Keys.A)){
- ob.moveX(-speed);
- }
- }
Мы знаем что id тайла рыбы равно 57, значит используем это.
- ob.collisionWall = new TiledObject.CollisionWall() {
- @Override
- public void collision(int xId, int yId, int dir){
- TiledLayer l = map.getLayer("wall");
- if(l.getCell(xId, yId).id == 57){
- l.setCell(null, xId, yId);
- }
- }
- };
Запустим... Ящики собираются. Всё работает.
Добавим счетчик
- public class TestMap extends ScreenGame{
- TiledMap map;
- TiledObject ob;
- Display display;
- int num = 0;
- int maxNum = 1;
- int id = 57;
- boolean isCollisionInf = false;
- @Override
- public void init(){
- LoadTiledMap load = new LoadTiledMap("./map.bin");
- map = load.load();
- ob = new TiledObject();
- ob.setSprite(new Sprite(new Texture(Gdx.files.local("./ground.png"))));
- ob.setSize(20, 20);
- ob.initPhysics(map, map.getLayer("wall"));
- ob.setPosition(10, 10);
- ob.collisionWall = new TiledObject.CollisionWall() {
- @Override
- public void collision(int xId, int yId, int dir){
- TiledLayer l = map.getLayer("wall");
- if(l.getCell(xId, yId).id == id){
- num++;
- l.setCell(null, xId, yId);
- } }
- };
- map.getLayer("ground").addObject(ob);
- maxNum = map.getLayer("wall").getNymId(id);
- }
- @Override
- public void draw(Batch batch){
- map.draw(camera);
- camera.position.x = ob.getX();
- camera.position.y = ob.getY();
- map.processinExitBorder(camera);
- int speed = 4;
- if(Gdx.input.isKeyPressed(Keys.W)){
- ob.moveY(speed);
- }
- if(Gdx.input.isKeyPressed(Keys.S)){
- ob.moveY(-speed);
- }
- if(Gdx.input.isKeyPressed(Keys.D)){
- ob.moveX(speed);
- }
- if(Gdx.input.isKeyPressed(Keys.A)){
- ob.moveX(-speed);
- }
- }
Нашлась опечатка. На время написание статьи getNymId, но дальше будет как getNumId.
Сделаем так чтобы нас оповестили о том, что мы всё собрали.
- ob.collisionWall = new TiledObject.CollisionWall() {
- @Override
- public void collision(int xId, int yId, int dir){
- TiledLayer l = map.getLayer("wall");
- if(l.getCell(xId, yId).id == id){
- num++;
- l.setCell(null, xId, yId);
- if(num == maxNum){
- TestMap.this.showInfo("Все собрано. Молодец!", 5000, display.camera);
- }
- }
- }
- };
Метод showInfo отображает строку.
Ну и добавим мы отображение своё.
Код всего класса
Ну и, наконец, допишем наш игровой класс
Код
Метод render() будет вызываться после draw(Batch), если вам нужно что-то сделать перед рисованием, то используйте update().
Исходник:
Форум