Java 与Libgdx和TiledMap协调问题
我对Libgdx和tileMap之间的坐标有问题。 我通过TiledMap创建了一个贴图,并在上面添加了一个对象层矩形,我希望在Libgdx中渲染贴图时,在矩形的相同位置添加一个字体。 出于这个原因,我在render method中做了如下操作:Java 与Libgdx和TiledMap协调问题,java,android,coordinates,Java,Android,Coordinates,我对Libgdx和tileMap之间的坐标有问题。 我通过TiledMap创建了一个贴图,并在上面添加了一个对象层矩形,我希望在Libgdx中渲染贴图时,在矩形的相同位置添加一个字体。 出于这个原因,我在render method中做了如下操作: @Override public void render () { Gdx.gl.glClearColor(1, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BI
@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();
}
}
}
以下是我在“创建”方法中设置摄影机和其他对象的方式:
@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
而对象在平铺贴图编辑器中的坐标为:
X: 14,062
Y: 5,156
让我试着调整一下,把事情弄清楚一点。我很确定你只需要在绘图前开始一批。所以我不认为有必要将其嵌入到for循环中 控制台显示屏上应该有一些东西可以进一步调试 每当需要向控制台输出某些内容时,可以尝试添加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();
}
在试图找出对象的绘制位置时,向代码中添加日志会有所帮助。如果从平铺贴图获取矩形贴图对象,则需要知道x和y值可以是平铺位置,而不是实际的x和y。要调试它,您需要输出矩形贴图对象的x和y值。您可能需要将x和y值乘以tilesize。例如:矩形的x和y值可以是x=6 y=5。这意味着贴图对象在上面是6个平铺,向上是5个平铺。你需要将其转换为游戏的实际x和y值。你的意思是什么?你需要知道x和y值可以是平铺位置,而不是实际的x和y。我注意到,对于X轴,字体对齐得很好,而对于Y轴,字体没有对齐。我为糟糕的打字道歉。我正在开一个无聊的会议,在平板电脑上打字。你需要做的是输出矩形的x和y来调试这个问题。如果我喜欢你说的我看不到字体。为什么?我做了:font.drabutch,Test Position,rect.getRectangle.x*32,rect.getRectangle.y*32;32是瓷砖的宽度和高度,我这样做了,但问题仍然存在。我注意到关于X轴对齐的字体是正确的,但是它相对于Y轴的位置不好,所以你可以看到它,但是Y轴是关闭的?你想让字体居中吗?字体与地图上你绘制有困难的其他物体的位置相比有点下移了?在我看来,你只是想稍微调整字体的绘制位置。我对地图中的所有对象都有这个问题