tmx 地图仅在我调整窗口大小时加载 libgdx

问题描述

好吧,我这辈子都搞不清楚。 我有一个游戏课

public class MyKoalabr8 extends Game {
    @Override
    public void create () {
        setScreen(new MainMenuScreen(this));
    }
}

这将设置主菜单屏幕

public class MainMenuScreen implements Screen {
    private Viewport viewport;
    private Stage stage;

    private MyKoalabr8 game;

    public MainMenuScreen(MyKoalabr8 game){
        this.game = game;
        viewport = new FitViewport(MyKoalabr8.V_WIDTH,MyKoalabr8.V_HEIGHT,new OrthographicCamera());
        stage = new Stage(viewport,(game).batch);
        Label.LabelStyle font = new Label.LabelStyle(new BitmapFont(),Color.WHITE);
        Table table = new Table();
        table.center();
        table.setFillParent(true);
        Label gameOverLabel = new Label("Play",font);
        table.add(gameOverLabel).expandX();
        table.row();
        stage.addActor(table);
    }

    @Override
    public void render(float delta) {
        if(Gdx.input.justTouched()) {
            System.out.println("changing screen");
            game.setScreen(new GameScreen(game));
            dispose();
        }
        Gdx.gl.glClearColor(0,1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        stage.draw();
    }
}

这个类所做的就是当用户点击它时,它会将屏幕设置为 GameScreen 但是,在我的游戏屏幕中,我有一个 TMX 地图,由于某种原因,除非我调整窗口大小,否则它不会渲染地图

    public GameScreen(MyKoalabr8 game) {
        this.game = game;
        camera = new OrthographicCamera();
        gamePort = new FitViewport((MyKoalabr8.V_WIDTH / MyKoalabr8.PPM),(MyKoalabr8.V_HEIGHT / MyKoalabr8.PPM),camera);
        gamePort.setWorldSize((MyKoalabr8.V_WIDTH / MyKoalabr8.PPM),(MyKoalabr8.V_HEIGHT / MyKoalabr8.PPM));
        gamePort.apply();
        maploader = new TmxMapLoader();
        map = maploader.load("level1.tmx");
        renderer = new OrthogonalTiledMapRenderer(map,1 / MyKoalabr8.PPM);
        camera.position.set(gamePort.getWorldWidth() / 2,gamePort.getWorldHeight() / 2,0);
        world = new World(new Vector2(0,0),true);
        new B2WorldCreator(world,map);
    }
    public void update(float dt) {
        world.step(1 / 60f,6,2);
        camera.update();
        renderer.setView(camera);
    }
    @Override
    public void render(float delta) {
        update(delta);
        Gdx.gl.glClearColor(1,1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        renderer.render();
        game.batch.setProjectionMatrix(camera.combined);
        game.batch.begin();
        game.batch.end();
    }

https://gyazo.com/19089bfeb7ee8a1b483a819ac9d2283c 请帮助我不知道为什么会坏

一个有效的解决方案是,如果我直接将 GameScreen 设置为屏幕

public class MyKoalabr8 extends Game {
    @Override
    public void create () {
        setScreen(new GameScreen(this));
    }
}

如果我这样做,它就可以正常工作。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)