我在我的2D平台游戏项目中使用libgdx
进行大学任务。现在我对在libgdx中加载tilesmap很困惑。我有一个大的tmx地图,大小为11400x1500像素和30x30瓷砖大小。也是具有相同像素大小的图像,我将其加载到图像层中。我尝试加载它,但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 map。
上面的代码不起作用,以下工作正常,请注意maploader
正在加载不同的tmx文件,上面的代码试图以30x30的磁贴大小加载11400x1500像素,而下面的代码试图用30x30加载3800x1500磁贴大小,但我尝试使用下面的代码加载更大的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();
}
答案 0 :(得分: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()
语句。还有调整大小的方法。当你需要在每次渲染迭代时更新相机时,这会在正确显示平铺地图时造成麻烦。