libgdx - 处理凸轮外的物体
libgdx - handling objects outside cam
我看了一些libgdx教程,学习了如何使用cam和tile制作地图。但是我遇到了一个小问题,我想要一些想法。
我想制作角色扮演游戏,但我希望游戏能够记住每个怪物的信息,例如位置。但是地图很大,所以我需要减少渲染量。如何在不使用大量资源的情况下保留每个怪物的信息,包括摄像机外的怪物?
根据你的问题,我假设你已经在 libGDX 中使用过 TiledMap
s。您可以使用 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);
}
}
我看了一些libgdx教程,学习了如何使用cam和tile制作地图。但是我遇到了一个小问题,我想要一些想法。 我想制作角色扮演游戏,但我希望游戏能够记住每个怪物的信息,例如位置。但是地图很大,所以我需要减少渲染量。如何在不使用大量资源的情况下保留每个怪物的信息,包括摄像机外的怪物?
根据你的问题,我假设你已经在 libGDX 中使用过 TiledMap
s。您可以使用 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);
}
}