我对Libgdx和TiledMap之间的坐标有疑问。 我通过TiledMap创建了一个地图,并在其上添加了一个对象层(矩形),当我在Libgdx中渲染地图时,我希望在矩形的相同位置添加一个字体。 出于这个原因,我在渲染方法中做到了这一点:
@Override
public void render () {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
camera.update();
renderer.setView(camera);
renderer.render();
MapObjects collisionObjects = map.getLayers().get("Rectangle").getObjects();
for(MapObject object : collisionObjects) {
if (object instanceof RectangleMapObject) {
RectangleMapObject rect = ((RectangleMapObject) object);
batch.setProjectionMatrix(camera.combined);
batch.begin();
font.setUseIntegerPositions(false);
font.draw(batch, "Test Position",rect.getRectangle().x,rect.getRectangle().y);
batch.end();
}
}
}
这是我如何在create方法中设置相机和其他:
@Override
public void create () {
font = new BitmapFont();
font.setColor(Color.BLACK);
float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();
Gdx.input.setInputProcessor(this);
camera = new OrthographicCamera(w,h);
camera.translate(w/2, h/2);
camera.update();
batch = new SpriteBatch();
map = new TmxMapLoader().load("TestRectangleMap.tmx");
renderer = new OrthogonalTiledMapRenderer(map);
}
我的问题是字体绘制的位置相对于平铺贴图中矩形的位置不正确。
你能帮我理解问题所在。 非常感谢您花费的时间。
协调输出 我这样做了:
System.out.println("X: "+rect.getRectangle().x);
System.out.println("Y: "+rect.getRectangle().y);
我明白了:
X: 450.0
Y: 232.0
而TiledMap编辑器中对象的坐标是:
X: 14,062
Y: 5,156
答案 0 :(得分:0)
让我试着调整一下,只是为了清理一下。我非常确定你只需要在绘图之前开始一批。因此,嵌入然后进入循环,我认为没有必要。
控制台显示屏上应该有几件事情可以进一步调试,
只要您需要输出到控制台,就可以尝试添加Gdx.app.log()方法。
@Override
public void render () {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
camera.update();
renderer.setView(camera);
renderer.render();
batch.setProjectionMatrix(camera.combined);
batch.begin();
MapObjects collisionObjects = map.getLayers().get("Rectangle").getObjects();
for(MapObject object : collisionObjects) {
if (object instanceof RectangleMapObject) {
RectangleMapObject rect = ((RectangleMapObject) object);
font.setUseIntegerPositions(false);
font.draw(batch, "Test Position",rect.getRectangle().x,rect.getRectangle().y);
Gdx.app.log("My Game", "Rect X: "+rect.getRectangle().x+" Y : "+rect.getRectangle().y);
}
}
batch.end();
}
在您尝试找出对象的绘制位置时,向代码添加日志会有所帮助。