首页 > 解决方案 > tmx Map 仅在我调整窗口大小时加载 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, 0, 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, 0, 0, 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));
    }
}

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

标签: javalibgdxtmx

解决方案


推荐阅读