【问题标题】:Get position of rendered object as map tile coordinates获取渲染对象的位置作为地图瓦片坐标
【发布时间】:2013-06-12 23:42:40
【问题描述】:

我正在使用 libgdx 渲染一个 32x32 瓦片的地图(每个瓦片为 32x32 像素)。我为此使用了 OrthogonalTiledMapRenderer。然后,我在屏幕上渲染一个简单的纹理,可以使用上/下/右/左移动。我想要的是根据地图图块位置获取纹理的位置。例如,如果纹理位于 tile (0, 0) 的顶部,我想知道这一点。到目前为止,我已经尝试使用 camera.unproject(texcoordpositionVector) 来获取这些信息,但效果并不稳定。

编辑:这是地图渲染器和相机的设置方式:

SCALE = 10;
w = Gdx.graphics.getWidth();
h = Gdx.graphics.getHeight();

map = new TmxMapLoader().load("map.tmx");
camera = new OrthographicCamera(SCALE * (w / h), SCALE);
renderer = new OrthogonalTiledMapRenderer(map, 1/32f);

然后,渲染:

camera.update();
camera.apply(Gdx.graphics.getGL10());
renderer.setView(camera);
renderer.render();

【问题讨论】:

  • 您是如何设置相机和/或地图渲染器的视图的? camera.unproject 是正确的起点,但您可能需要根据您的单位规模调整结果。
  • @P.T.我编辑了我的问题以包含该信息。

标签: java 2d libgdx


【解决方案1】:

如果您的纹理是使用与地图相同的相机绘制的,那么它应该已经在图块空间中。如果您使用其他相机,则需要使用该相机投影位置,然后使用地图相机取消投影。

【讨论】:

  • “用与地图相同的相机绘制”是什么意思?你的意思是我应该将用于渲染纹理的 SpriteBatch 对象的投影矩阵设置为camera.projection
  • 是的... 通常,您会为地图和在地图上绘制的对象使用相同的单位。这意味着要么配置您的对象以使用地图的比例,要么设置您的地图渲染器以匹配其他对象。 Super Koalio 示例显示了解决此问题的一种方法。
  • 好的,我看过了,现在正在使用renderer.getSpriteBatch() 来绘制纹理。但问题是,它每次都画出太大的纹理。
  • 您需要缩放纹理以匹配地图的比例。请参阅 Super Koalio 示例的第 92-93 行。
猜你喜欢
  • 2014-03-17
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
相关资源
最近更新 更多