【发布时间】: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 像素
-
与其一次性加载会消耗大量资源,不如在到达地图角落时加载新地图。您可以使用地图末尾所在的地图属性来获得它。玩家到达终点后,立即加载新地图。