Hey guys, good evening!
I'm getting a weird behaviour trying to render a TiledMap
. If I try to render it before anything else, it doesn't show up on the screen. I need to render something in advance for it to work. In example,
public void render(GameContainer gc, Graphics g) {
tiledMap.draw(g, 32, 32);
}
Shows a black screen.
But,
public void render(GameContainer gc, Graphics g) {
g.drawCircle(0, 0, 5);
tiledMap.draw(g, 32, 32);
}
renders the circle and the map.
Is this a known issue?
I made some changes since my last message, but the issue persists. Actually, my code is very simple yet.
The main screen:
public class IndoorScreen extends BasicGameScreen {
private GameMap tiledMap;
// ...
@Override
public void initialise(GameContainer gc) {
try {
tiledMap = new GameMap(Gdx.files.internal("Maps/sample_indoor.tmx"));
} catch (IOException ex) {
ex.printStackTrace();
}
}
@Override
public void render(GameContainer gc, Graphics g) {
g.drawCircle(0, 0, 5); // tiledMap won't render if this line is not present.
tiledMap.render(gc, g);
}
}
The GameMap
class:
public class GameMap extends TiledMap {
private int positionX = 0;
private int positionY = 0;
private float renderScale = 1.2f;
// ...
public void render(GameContainer gc, Graphics g) {
g.scale(renderScale, renderScale);
this.draw(g, positionX, positionY);
g.scale(1, 1);
}
}
Later I discovered that rendering something after tiledMap.draw()
will make it work on the next render()
call. In other words:
// IndoorScreen class
private int renderCalls = 0;
@Override
public void render(GameContainer gc, Graphics g) {
tiledMap.render(gc, g);
g.drawCircle(0, 0, 5);
System.out.println("renderCall: " + ++renderCalls);
}
renderCall: 1 -> Just the circle.
renderCall: 2 -> Both circle and map.
This is not a huge problem for me, as I indeed need to render other objects. But It gave me a headache when the first thing I was trying to do was make the map show up on the screen.