I have a Map class, and a MapScreen class that extends the LibGDX Screen functionality. The viewport is not updating properly. When drawing a sprite, it stretches when the window is resized instead of simply seeing more of the sprite.
Map Class
public abstract class Map
{
/** Relative to display and rendering */
private OrthographicCamera camera;
private ScreenViewport viewport;
private SpriteBatch batch;
private Box2DDebugRenderer render;
private boolean renderDebug = true;
/** Map components */
private EntityManager entityManager;
private RayHandler rayHandler;
private ArrayList<MapWall> walls;
private World world;
/** Important entities */
private Entity player;
public abstract void define();
public void show()
{
/** Create camera related objects */
camera = new OrthographicCamera();
viewport = new ScreenViewport(camera);
viewport.setUnitsPerPixel(1 / 32f);
viewport.apply();
render = new Box2DDebugRenderer();
batch = new SpriteBatch();
/** Create map components */
world = new World(new Vector2(0, 0), true);
rayHandler = new RayHandler(world);
walls = new ArrayList<MapWall>();
entityManager = new EntityManager();
/** Create important entities */
player = new EntityPlayer(batch, world, camera, rayHandler);
//entityManager.addEntity(player);
}
public void update()
{
world.step(1/60f, 6, 2);
rayHandler.update();
}
public void render()
{
entityManager.render();
rayHandler.render();
for (MapWall w : walls) w.render();
if (renderDebug) render.render(world, camera.combined);
batch.begin();
batch.draw(new Texture(Gdx.files.internal("wood.png")), 10, 10);
batch.end();
}
public void dispose()
{
}
/* ... redacted code ... */
}
MapScreen Class
package com.elsealabs.ghostr;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
public class MapScreen extends ScreenObject {
private Map map;
public MapScreen(GameObject game, String name) {
super(game, name);
}
public void show()
{
map.show();
resize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
}
@Override
public void render(float delta) {
map.update();
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
map.render();
if (map.isRenderDebug()) map.getRender().render(map.getWorld(), map.getCamera().combined);
}
@Override
public void resize(int width, int height) {
map.getViewport().update(width, height);
}
@Override
public void dispose() {
map.dispose();
}
public void pause() { }
public void resume() { }
public void hide() { }
/** Getters and setters */
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
}