Я пытаюсь создать игру, похожую на Zelda, и не могу понять, как настроить камеру orthographi c на отображение только одной комнаты в TileMap, при этом размер экрана остается независимым. Прямо сейчас мне нужно изменить размер экрана, чтобы сфокусировать комнату, но тогда размер экрана становится очень маленьким. Любая помощь приветствуется. Ниже мой код:
package screens;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.maps.tiled.TiledMap;
import com.badlogic.gdx.maps.tiled.TmxMapLoader;
import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer;
import com.badlogic.gdx.utils.viewport.FitViewport;
import com.badlogic.gdx.utils.viewport.Viewport;
import com.japundzic.icsgame.icsGame;
import com.sun.org.apache.xpath.internal.operations.Or;
import Scenes.hud;
public class playScreen implements Screen {
private icsGame game;
private OrthographicCamera gameCam;
private Viewport gamePort;
private Scenes.hud hud;
private TmxMapLoader mapLoader;
private TiledMap map;
private OrthogonalTiledMapRenderer renderer;
public playScreen(icsGame game) {
this.game = game;
gameCam = new OrthographicCamera();
gamePort = new FitViewport(icsGame.V_WIDTH,icsGame.V_HEIGHT,gameCam);
hud = new hud(game.batch);
mapLoader = new TmxMapLoader();
map = mapLoader.load("test3.tmx");
renderer = new OrthogonalTiledMapRenderer(map);
gameCam.position.set(gamePort.getWorldWidth() / 2, gamePort.getWorldHeight() / 2, 0);
}
@Override
public void show() {
}
public void handleInput(float dt){
if(Gdx.input.isKeyPressed(Input.Keys.DPAD_LEFT))
gameCam.position.x -= 1000 *dt;
if(Gdx.input.isKeyPressed(Input.Keys.DPAD_RIGHT))
gameCam.position.x += 1000 *dt;
if(Gdx.input.isKeyPressed(Input.Keys.DPAD_UP))
gameCam.position.y += 1000 *dt;
if(Gdx.input.isKeyPressed(Input.Keys.DPAD_DOWN))
gameCam.position.y -= 1000 *dt;
}
public void update(float dt){
handleInput(dt);
gameCam.update();
renderer.setView(gameCam);
}
@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() {
}
}