Eu to aprendendo a desenvolver um jogo feito supermario através de um tutorial no youtube (https://www.youtube.com/watch?v=P8jgD-V5jG8&t=43s), o codigo que o cara disponibiliza no github É FUNCIONAL AINDA HOJE, todavia é o codigo do jogo completo e eu ainda estou na aula 6, porque foi aqui que as coisas ficaram estranhas (como você pode ver pela imagem).
Eu ficaria muito agradecido se um de vocês programadores mais experientes pudessem me ajudar me dizendo aonde errei para estar renderizando apenas 2 blocos do mapa, obrigado por tentar ajudar.
A classe principal:
`
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();
}
}
`
A classe da tela do jogo (Aqui que eu acho que está o erro!)
`
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();
}
}
`
A classe do hud (menu superior do jogo (score, nivel, etc)):
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();
}
}
Obrigado por tomar seu tempo para tentar me ajudar, eu já perdi uma semana inteira tentando resolver isso =/ (triste)