【问题标题】:loading TiledMap into stage class ,libgdx将 TiledMap 加载到舞台类 libgdx
【发布时间】:2015-09-21 04:03:45
【问题描述】:

我正在尝试将 tmx 地图加载到舞台类中,但是当我运行我的游戏时,屏幕不显示任何关于地图的信息,只打印角色,我认为问题出在相机但不知道如何解决:

抽象屏幕:

public abstract class AbstractScreen extends Stage implements Screen{



protected AbstractScreen(){
    //Crea un punto de vista por defecto
    super(new StretchViewport(1024, 720));
}

/**
 * que deberá ser implementado por cada pantalla de nuestro juego. 
 * Este método se utiliza para añadir los actores a cada escena 
 * (LibGDX Scene2d).
 */
public abstract void buildStage();
public abstract void dispose();

public void render(float arg0) {
    /*
     * Limpiamos la Screen
     */
    //Con esto se define el color con el que se borrara el buffer al hacer un glClear()
    //Rgb y alpha(transparecia)
    Gdx.gl20.glClearColor(0, 0, 0, 1);
    // limpiar el buffer depth, el buffer secundario, 
    //para que no tenga cosas previamente dibujadas
    Gdx.gl.glClear(GL11.GL_COLOR_BUFFER_BIT);
    //buildStage();
    //llamada metodos stage
    super.act(Gdx.graphics.getDeltaTime());
    super.draw();
}

public void show() {
    // TODO Auto-generated method stub
    Gdx.input.setInputProcessor(this);
}


public void resize(int width, int height) {
    getViewport().update(width, height, true);

}


public void hide() {}

public void pause() {}

public void resume() {}

}

屏幕:

public class SpriteScreen extends AbstractScreen implements InputProcessor {

//private SpriteActor mActor;
private Player jugador;
private TouchPadPlayer touchpad;

private TiledMap map;
private static OrthogonalTiledMapRenderer renderer; 
private TiledMapTileLayer collision;

public SpriteScreen() {
    this.jugador = new Player(getWidth() / 2, getHeight() / 2);
    this.touchpad = new TouchPadPlayer();
    this.touchpad.setPosition(100, 100);

    this.map=new TmxMapLoader().load("assests/maps/example.tmx");
    collision = (TiledMapTileLayer)map.getLayers().get("Colisiones");
    renderer = new OrthogonalTiledMapRenderer(map, 1 / 16f);
}

@Override
public void buildStage() {
    // TODO Auto-generated method stub
    renderer.render();      
    Gdx.input.setInputProcessor(this);
    addActor(this.jugador);
    addActor(this.touchpad);

    this.getCamera().update();
    renderer.setView((OrthographicCamera) this.getCamera());
    renderer.render();


}

@Override
public void dispose() {
    // TODO Auto-generated method stub
    map.dispose();
    renderer.dispose();
}

【问题讨论】:

  • 尝试从渲染器中移除 1/16f = new OrthogonalTiledMapRenderer(map, 1 / 16f);看看它是否有效。由于 1/16f 是单位比例,我认为这是将地图的比例设置为非常小,因此您看不到地图。

标签: java android libgdx stage tmx


【解决方案1】:

您必须在“屏幕”的render() 方法中调用renderer.render();,而不是在buildStage() 方法中。

【讨论】:

    【解决方案2】:

    首先,您的瓷砖尺寸是多少?你确定它是 16 x 16 像素吗?如果是这种情况,那么在您的 AbstractScreen 中的 resize 方法中,您需要将相机调整为:

     public void resize(int width, int height) {
        getViewport().update(width, height, true);
        getViewport().getcamera().viewportWidth = YourScreenWidth / 16f;
        getViewport().getcamera().viewportHeight = YourScreenHeight / 16f;
        //set the camera to start from 0,0 and not from the center of the screen
        getViewport().getcamera().setToOrtho(false,                                            
                                            getViewport().getcamera().viewportWidth / 2f,
                                            getViewport().getcamera().viewportHeight/ 2f);
    
       getViewport().getcamera().update();
     }
    

    这应该会在整个屏幕上显示您的地图。基本上,对于平铺地图,您无法以编程方式调整它们的大小,因为没有 setSize、setWidth 等方法,所以诀窍是使用相机和平铺大小来正确显示它们。

    【讨论】:

    • 谢谢这是问题
    猜你喜欢
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2019-03-23
    • 2017-07-06
    • 2013-01-23
    • 1970-01-01
    相关资源
    最近更新 更多