我正在尝试将相机设置为聚焦在中心的播放器上,因为它越过TiledMap固定到位。我正在为相机使用此渲染代码:
OverworldWorld world;
Player player;
OrthographicCamera cam;
SpriteBatch batch;
TiledMap map;
TileAtlas tileAtlas;
TileMapRenderer tmr;
public Renderer(OverworldWorld world){
this.world = world;
world.setRenderer(this);
width = Gdx.graphics.getWidth();
height = Gdx.graphics.getHeight();
new TiledLoader();
map = TiledLoader.createMap(Gdx.files.internal("maps/island.tmx"));
tileAtlas = new TileAtlas(map, Gdx.files.internal("maps/"));
tmr = new TileMapRenderer(map, tileAtlas, 16, 16);
cam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
cam.setToOrtho(false, width, height);
cam.position.set(0, 0, 0);
cam.update();
batch = new SpriteBatch();
batch.setProjectionMatrix(cam.projection);
sr = new ShapeRenderer();
}
public void render(){
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
player = world.getPlayer();
cam.position.set(player.getPosition().x, player.getPosition().y, 0);
cam.update();
tmr.getProjectionMatrix().set(cam.combined);
Vector3 tmp = new Vector3();
tmp.set(0, 0, 0);
cam.unproject(tmp);
tmr.render((int) tmp.x, (int) tmp.y, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
结果是玩家被锁定在地图的左下角,移动玩家会将相机移动到地图上。这个运动非常基础:
player = world.getPlayer();
switch(keycode){
case Keys.W:
player.getVelocity().y = 1;
player.direction = "up";
break;
并更新玩家位置使用此(这是0.9.8版本):
position.add(velocity.tmp().mul(Gdx.graphics.getDeltaTime() * speed));
导致此问题的原因是什么,以及如何修复?
答案 0 :(得分:3)
我会尽力解释我所知道的实现此方法的一种方式,如果这没有用,请抱歉。
您需要能够让您的玩家获得当前的XY。 getX(),getY()。您可以手动将其添加到播放器类。一旦你有权访问,你需要做的就是将摄像机空置,并将摄像机位置设置为玩家XY,他的宽度,高度和一些小分区。这看起来像这样。
@Override
public void create() {
cam = new OrthographicCamera();
}
这将适用于create(),resize()或show()方法。
最后我们渲染相机并获得坐标。
@Override
public void render() {
Gdx.gl.glClearColor(0.294f, 0.294f, 0.294f, 1f);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
cam.position.set(viewer.getX() + viewer.getWidth() / 2, viewer.getY() + viewer.getHeight() / 2, 0);
cam.viewportWidth = Gdx.graphics.getWidth() / viewer.getZoom();
cam.viewportHeight = Gdx.graphics.getHeight() / viewer.getZoom();
cam.update();
}
所以简单的数学。
(玩家当前X +玩家当前宽度/ 2)x和(玩家当前Y +玩家当前高度/ 2)y
之后的行是如何使用存储在播放器类中的浮点缩放相机的示例。
cam.viewportWidth = Gdx.graphics.getWidth() / viewer.getZoom();
cam.viewportHeight = Gdx.graphics.getHeight() / viewer.getZoom();
使用此代码,您可以轻松地让相机在角色加速时放大和缩小。
我希望这会有所帮助。