的TMX地图仅呈现两个街区到屏幕和所有其余的是黑色
问题描述:
The print from my game的TMX地图仅呈现两个街区到屏幕和所有其余的是黑色
我通过学习YouTube上的教程(https://www.youtube.com/watch?v=P8jgD-V5jG8&t=43s)到像下发展一个supermario游戏,代码的作者本教程在他的github上提供了今天仍在工作,但它是游戏的完整代码,而且我仍然在视频课程6中,因为在这里他的结果与我的不同(正如您可以从中看到的那样图片)。
如果您有任何经验丰富的开发人员能告诉我我错在哪里只显示2块tmx地图,我将不胜感激。我为我的英语道歉,感谢您的帮助。
的主类游戏:
public class MarioBros extends Game {
public SpriteBatch batch;
public static final int V_WIDTH = 400;
public static final int V_HEIGHT = 208;
@Override
public void create() {
batch = new SpriteBatch();
setScreen(new PlayScreen(this));
}
@Override
public void render() {
super.render(); //Delega o metodo render para as SCREENS que estão ativas.
}
@Override
public void dispose() {
batch.dispose();
}
}
的播放屏幕(我认为问题就在这里!):
public class PlayScreen implements Screen {
private MarioBros game;
private OrthographicCamera gamecam;
private Viewport gamePort;
private HUD hud;
private TmxMapLoader maploader;
private TiledMap map;
private OrthogonalTiledMapRenderer renderer;
public PlayScreen(MarioBros game) {
this.game = game;
gamecam = new OrthographicCamera();
gamecam.position.set(gamePort.getWorldWidth()/2, gamePort.getWorldHeight()/2, 0);
gamePort = new FitViewport(MarioBros.V_WIDTH, MarioBros.V_HEIGHT, gamecam);
gamePort.apply();
hud = new HUD(game.batch);
// Loading the map we made in Tile
maploader = new TmxMapLoader();
map = maploader.load("level1.tmx");
renderer = new OrthogonalTiledMapRenderer(map);
}
@Override
public void show() {
}
public void handleInput(float dt) {
if (Gdx.input.isTouched())
gamecam.position.x += 100 * dt;
}
public void update(float dt) {
handleInput(dt);
gamecam.update();
}
@Override
public void render(float delta) {
update(delta);
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
renderer.render();
game.batch.setProjectionMatrix(hud.stage.getCamera().combined);
hud.stage.draw();
}
@Override
public void resize(int width, int height) {
gamePort.update(width, height);
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
}
@Override
public void dispose() {
renderer.dispose();
}
}
的铁汉:
public class HUD implements Disposable{
public Stage stage;
private Viewport viewport; // Novo viewport
private Integer worldTimer;
private float timeCount;
private Integer score;
Label countdownLabel; // Label é equivalente ao widget, nessa biblioteca gdx
Label scoreLabel;
Label timeLabel;
Label levelLabel;
Label worldLabel;
Label marioLabel;
public HUD(SpriteBatch sb){
worldTimer = 300;
timeCount = 0;
score = 0;
viewport = new FitViewport(MarioBros.V_WIDTH, MarioBros.V_HEIGHT, new OrthographicCamera());
stage = new Stage(viewport, sb); // Stage é um bloco que você insere coisas (inicialmente soltas dentro dele)
Table table = new Table(); // Prender os itens em uma tabela
table.top(); // Coloca no topo do nosso stage
table.setFillParent(true); // largura do nosso stage
countdownLabel = new Label(String.format("%03d", worldTimer), new Label.LabelStyle(new BitmapFont(), Color.WHITE));
scoreLabel = new Label(String.format("%06d", score), new Label.LabelStyle(new BitmapFont(), Color.WHITE));
timeLabel = new Label("TIME", new Label.LabelStyle(new BitmapFont(), Color.WHITE));
levelLabel =new Label("1-1", new Label.LabelStyle(new BitmapFont(), Color.WHITE));
worldLabel =new Label("WORLD", new Label.LabelStyle(new BitmapFont(), Color.WHITE));
marioLabel =new Label("MARIO", new Label.LabelStyle(new BitmapFont(), Color.WHITE));
//expandX vai expandir X ao maximo, por isso devemos por em todos para eles dividirem igualmente o eixo X.
table.add(marioLabel).expandX().padTop(10);
table.add(worldLabel).expandX().padTop(10);
table.add(timeLabel).expandX().padTop(10);
table.row();
table.add(scoreLabel).expandX();
table.add(levelLabel).expandX();
table.add(countdownLabel).expandX();
//inserir a table no estagio
stage.addActor(table);
}
@Override
public void dispose() {
stage.dispose();
}
}
感谢您抽出时间来尽力帮助我,我已经失去了整整一个星期试图解决这个问题= /(SAD)
你确定你的tmx文件是正确的吗?这两个区块是显示在其左下角还是其他地方?我对libgdx了解不多,因此我可能会围绕'gamecam.position.set(gamePort.getWorldWidth()/ 2,gamePort.getWorldHeight()/ 2,0)来玩游戏。 gamePort = new FitViewport(MarioBros.V_WIDTH,MarioBros.V_HEIGHT,gamecam);' – Kilazur
谢谢你试图帮助!是的,我使用的是本教程的作者正在使用的同一个tmx文件,他的工作正常。 –