【问题标题】:Couldn't load tmx无法加载 tmx
【发布时间】:2016-04-05 09:32:28
【问题描述】:

我在我的 2D 平台游戏项目中使用 libgdx 来完成大学任务。现在我对在 libgdx 中加载 tiledmap 感到困惑。我有一个大小为 11400x1500 像素和 30x30 平铺大小的大 tmx 地图。还有一个具有相同像素大小的图像,我将它加载到图像层中。我尝试加载它,但 libgdx 什么也没显示。
我的问题是如何加载单个大 tmx 地图或者我应该将地图分成几个段/部分?因为我尝试过其他小型 tmx (3000x1500)。如果 tmx 被分割,那么如何将它们作为一个阶段加载?

public class Layarloh implements Screen{
private JumatUtama game;
private TiledMap map;
private TmxMapLoader mapLoader;
private OrthographicCamera kamera;
private OrthogonalTiledMapRenderer mapRenderer;
private Viewport viewport;

public Layarloh(JumatUtama utama) {
    float l=Gdx.graphics.getWidth(),t=Gdx.graphics.getHeight();
    this.game = utama;

    loadstage();
    kamera = new OrthographicCamera();
    kamera.setToOrtho(false,l,t);
    kamera.update();
    viewport = new FitViewport(l/3,t/3,kamera);

}
public void loadstage(){
    mapLoader = new TmxMapLoader();
    map = mapLoader.load("stage/s11.tmx");
    mapRenderer = new OrthogonalTiledMapRenderer(map);

}
public void stik(float dt){
    if (Gdx.input.isKeyPressed(Input.Keys.ANY_KEY))
        kamera.position.x +=100*dt;

}
@Override
public void render(float delta) {
    stik(delta);
    kamera.position.set(550,550,0);
    kamera.update();
    mapRenderer.setView(kamera);
    mapRenderer.render();
}
@Override
public void resize(int width, int height) {
    kamera.viewportWidth = viewport.getScreenWidth();
    kamera.viewportHeight = viewport.getScreenHeight();
    kamera.update();
}


Unitscale 什么都不做,上面的代码适用于较小尺寸的 tmx 地图。

编辑

上面的代码不工作,下面的工作,注意maploader 正在加载不同的 tmx 文件,上面的代码尝试加载 11400x1500 像素和 30x30 大小的图块,而下面的代码尝试加载 3800x1500 和 30x30 大小的图块,但我尝试使用下面的代码来加载更大的 tmx,它不起作用,

public class Layarloh implements Screen{
private JumatUtama game;
private TiledMap map;
private TmxMapLoader mapLoader;
private OrthographicCamera kamera;
private OrthogonalTiledMapRenderer mapRenderer;

public Layarloh(JumatUtama utama) {
    float l=Gdx.graphics.getWidth(),t=Gdx.graphics.getHeight();
    this.game = utama;

    loadstage();
    kamera = new OrthographicCamera();
    kamera.setToOrtho(false,l,t);
    kamera.position.set(550,550,0);
    kamera.update();

}

public void loadstage(){
    mapLoader = new TmxMapLoader();
    map = mapLoader.load("stage/segmen1.tmx");
    mapRenderer = new OrthogonalTiledMapRenderer(map);

}
public void stik(float dt){
    if (Gdx.input.isKeyPressed(Input.Keys.ANY_KEY))
        kamera.position.x +=100*dt;
}

@Override
public void render(float delta) {
    stik(delta);
    kamera.update();
    mapRenderer.setView(kamera);
    mapRenderer.render();
}

【问题讨论】:

  • 控制台上是否显示任何内容?尝试启用记录器。
  • camera.position.x +=100*dt;现在尝试禁用它,看看会发生什么。
  • camera.position.set(550,550,0);您也可以尝试在这里使用 0, 0, 0 而不是 550, 550, 0 吗?
  • kamera.position.x 只是用于测试我按任意键时可滚动的背景,它工作正常,kamera.position.set 是设置相机以便我可以看到图片,这是我的stage1。 png link 大小为 11400x1500 像素
  • 与其一次性加载会消耗大量资源,不如在到达地图角落时加载新地图。您可以使用地图末尾所在的地图属性来获得它。玩家到达终点后,立即加载新地图。

标签: libgdx tmx


【解决方案1】:

试试这个代码,这应该可以解决它。

@Override
public void render(float delta) {
    kamera.position.set(x, y, z);
    kamera.update();
    mapRenderer.setView(kamera);
    mapRenderer.render();
}

@Override
public void resize(int width, int height) {
    kamera.viewportWidth = width;
    kamera.viewportHeight = height;
    kamera.update();
}

编辑 在原始代码中,OP 缺少 kamera.update() 语句。还有调整大小的方法。这会在正确显示平铺地图时造成麻烦,因为您需要在每次渲染迭代时更新相机。

【讨论】:

  • 我已经更新了包含您的代码的问题,但仍然无法正常工作,我更新的代码是我的PlayScreen class
  • 为什么要修复它?这只是答案中不太有用的部分。
  • 由于解决方案缺少 camera.update() 方法,OP 现在编辑了他的问题。
  • @msw 我已经编辑了我的解决方案并给出了解释。 :)
猜你喜欢
  • 2014-08-01
  • 1970-01-01
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多