java - 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));
}
}
如果我这样做,它工作正常。
解决方案
推荐阅读
- c++ - 使用参数调用构造函数会重置先前初始化的数据元素 - 发布/调试 VS17
- javascript - iOS Safari:仅音频录制噪音
- python - 如何根据传递的参数动态更改函数的输出?
- asp.net-core - ASP.NET Core SignalR 仅将消息路由到某些客户端
- bar-chart - 如何从三个独立的数据源创建单个条形图?
- java - 主要错误空指针异常/也无法在命令行中运行
- ios - DateFormatter 提前一小时
- javascript - 如何理解和查看 HTML 嵌入式 JavaScript 的解析?
- javascript - 如何在特定数量的计数器上发出警告/消息?
- ios - UITableView 自动维度无法正常工作