libgdx - 处理凸轮外的物体

libgdx - handling objects outside cam

我看了一些libgdx教程,学习了如何使用cam和tile制作地图。但是我遇到了一个小问题,我想要一些想法。 我想制作角色扮演游戏,但我希望游戏能够记住每个怪物的信息,例如位置。但是地图很大,所以我需要减少渲染量。如何在不使用大量资源的情况下保留每个怪物的信息,包括摄像机外的怪物?

根据你的问题,我假设你已经在 libGDX 中使用过 TiledMaps。您可以使用 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);
    }

}