Как настроить Orthographiccamera так, чтобы она фокусировалась только на одной комнате в Tilemap LibGDX - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь создать игру, похожую на 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() {

    }
    }
...