2015-12-31 22 views
0

我在我的2D平台游戏项目中使用libgdx进行大学任务。现在我很困惑在libgdx中加载tiledmap。我有一个大的tmx地图,大小为11400x1500像素,大小为30x30。也是一个图像具有相同的像素大小,我把它加载到图像层。我尝试加载它,但libgdx什么也没有显示。
我的问题是如何加载单个大tmx地图,或者我应该把地图分成几个段/部分?因为我试过其他小型tmx(3000x1500)。如果tmx被分割,那么如何将它们加载为一个阶段?无法加载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地图的尺寸​​更小。

EDIT

以上代码不工作,并且在下面的工作中,注意maploader加载不同TMX文件,上面的代码试图加载11400x1500像素与30×瓦片尺寸,而下面的代码试图加载3800x1500与30×瓷砖的大小,但我尝试使用下面的代码加载更大的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

它显示任何东西在控制台上?尝试启用记录器。 – Sneh

+0

kamera.position.x + = 100 * dt;现在就尝试禁用它,看看会发生什么。 – Sneh

+0

kamera.position.set(550,550,0);你可以尝试在这里使用0,0,0而不是550,550,0吗? – Sneh

回答

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()声明。还有resize方法。这是在正确显示平铺地图时造成麻烦的原因,因为您需要在每次渲染迭代时更新相机。

+0

我已经更新了包含代码的问题,但仍然无效,我更新的代码是我的“PlayScreen”_class_ – randuwe

+0

它为什么要修复它?这只是答案中不太有用的部分。 – msw

+0

由于解决方案缺少camera.update()方法,OP现在编辑了他的问题。 – Sneh