0

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();
}
4

2 に答える 2

0

メソッドではなく、「画面」のメソッドrenderer.render();を呼び出す必要があります。render()buildStage()

于 2015-10-30T09:40:57.510 に答える
0

まず、タイルのサイズは?16 x 16 ピクセルでよろしいですか? その場合は、サイズ変更メソッドの AbstractScreen で、カメラを次のように調整する必要があります。

 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 などのメソッドがないため、プログラムでサイズを変更することはできません。そのため、トリックは、カメラとタイル サイズを操作して正しく表示することです。

于 2015-07-03T11:26:30.167 に答える