2017-01-02 4 views
-2

Я просмотрел некоторые учебники по libgdx и научился использовать камеру и использовать плитку для создания карты. Однако я встречаю небольшую проблему, требующую некоторых идей. Я хочу сделать игру RPG, но хочу, чтобы игра запоминала информацию каждого монстра, такую ​​как местоположение. Однако карта очень большая, поэтому мне нужно уменьшить объем рендеринга. Как я могу хранить информацию о каждом монстре, в том числе вне камеры, не используя много ресурсов?libgdx - управляющие объекты вне камеры

+0

Для вас большая карта, ваш нужно будет использовать метод называется вырезку , Что касается хранения информации, создайте объект Java с необходимой информацией, такой как позиция, texturereregions и ect. –

ответ

1

Я полагаю из вашего вопроса, что вы уже работали с TiledMap s в libGDX. Вы можете использовать OrthogonalTiledMapRenderer рисовать карту, которая будет оказывать правильную часть экрана для Вас, используя Camera объект, который вы передаете ему:

OrthogonalTiledMapRenderer renderer = 
    new OrthogonalTiledMapRenderer(myMap, 1/16f); // Change this to your render scale 
                //e.g. 1/32f means your tiles are 32px wide 

OrthographicCamera camera = new OrthographicCamera(16, 9); //viewport size: 16x9 

... 

//Inside your class that implements Screen or extends Game 
public void render(float delta) { 
    ... 
    renderer.setView(camera); 
    renderer.render(); 
    ... 
} 

для управления объектами, посмотри на the Ashley framework. Вы можете дать всем вашим объектам Component, содержащим его позицию, а затем создать систему рендеринга для их рисования.

Вам придется рисовать свои объекты самостоятельно, так как они не являются частью TiledMap, но для начала эта реализация system using Box2dDebugRenderer может помочь.

Если вы не с помощью Box2D, вот пример того, как это могло бы выглядеть используя EntitySystem (не проверено):

public class RenderingSystem extends IteratingSystem { 

    public static final Family MONSTERS = Family.all(BoxComponent.class).get(); 
    //Assumes you've made a BoxComponent class 

    private ShapeRenderer shapes; 
    private Camera camera; 

    public RenderingSystem(Camera camera) { 
     super(MONSTERS); 
     this.camera = camera; 
     this.shapes = new ShapeRenderer(); 
    } 

    @Override 
    public void update(float deltaTime) { 
     shapes.begin(ShapeType.Line); 
     shapes.setColor(Color.RED); 
     super.update(deltaTime); 
     shapes.end(); 
    } 

    @Override 
    protected void processEntity(Entity entity, float deltaTime) { 
     Rectangle box = entity.getComponent(BoxComponent.class); 
     //^Could be done faster using ComponentMappers 
     shapes.rect(box.x, box.y, box.width, box.height); 
    } 

} 
+0

благодарю вас за информацию, но я не знаю, как использовать рамки ashley ... Я очень новичок в программировании. Как я могу реализовать библиотеку для своего проекта? – sunmaggot

+0

Вы используете Gradle для создания своих проектов? Если да, вы можете просто добавить эти строки [здесь] (https://github.com/libgdx/ashley/wiki/Getting-started-with-Ashley#gradle) в свои файлы градиента и перестроить. Если нет, libGDX использует Gradle, поэтому вы можете импортировать его в свою среду IDE (Eclipse/IntelliJ), используя [this] (https://github.com/libgdx/libgdx/wiki/Gradle-and-Eclipse), если вы используете Eclipse или [this] (https://github.com/libgdx/libgdx/wiki/Gradle-and-Intellij-IDEA), если вы используете IntelliJ. Существует также раздел NetBeans [здесь] (https://github.com/libgdx/libgdx/wiki/Gradle-and-NetBeans). – Moira

+0

, конечно, если вы не хотите иметь дело с Gradle, теперь вы можете просто сгенерировать свой проект, [выбрать Ashley] (http://i.imgur.com/BjUgEmn.png) и скопировать весь свой старый код но я очень рекомендую научиться использовать Gradle, поскольку он очень полезен и делает все проще :) – Moira

Смежные вопросы