Fitviewport LIBGDX для разных сцен / камер - PullRequest
0 голосов
/ 07 декабря 2018

Так что я много читал о fitviewport и не могу заставить его работать для моего реального проекта.У меня есть разные этапы: одна камера для моего меню / hud и другая камера для моей мозаичной карты.

Моя мозаичная карта отображается один раз за рендер, но слой деревьев визуализируется дважды (я так хочу).И не могу правильно подогнать его.

Базовый экран:

@Override
public void render(float delta) {
    Gdx.gl.glClearColor(.25f, .25f, .4f, 1f);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    cam.update();
    stage.getViewport().apply();
    game.getBatch().setProjectionMatrix(cam.combined);

    //stage.act(delta);
    //stage.draw();
}


@Override
public void show() {
    if (cam == null) {
        cam = new OrthographicCamera();
        cam.setToOrtho(false, Constants.VIEWPORT_WIDTH, Constants.VIEWPORT_HEIGHT);
    }

    if (viewport == null) {
        viewport = new FitViewport(Constants.VIEWPORT_WIDTH, Constants.VIEWPORT_HEIGHT, cam);
        viewport.apply();
    }


    if (stage == null) {
        stage = new Stage(viewport, game.getBatch());
    }

@Override
public void resize(int width, int height) {
    stage.getViewport().update(width, height,true);
}

Экран меню:

@Override
public void setUpInterface(Table table) {
    skinStage = new SkinsStage(game, viewport, listener);
    infoStage = new InfoStage(game, viewport, listener);
    onlineStage = new OnlineStage(game, viewport, listener);
    settingsStage = new SettingsStage(game, viewport, listener, nightListener);
    statisticsStage = new StatisticsStage(game, viewport, listener);


if(map == null) {
        map = new TownMap(game, 1f);
        //camMap = new OrthographicCamera(Constants.VIEWPORT_WIDTH, Constants.VIEWPORT_HEIGHT);
        camMap = new OrthographicCamera(viewport.getWorldWidth(), viewport.getWorldHeight());
        camMap.setToOrtho(false, Constants.VIEWPORT_WIDTH, Constants.VIEWPORT_HEIGHT);
        camMap.position.x += 10*Constants.PixelsPerMeter;
        camMap.position.y += 10*Constants.PixelsPerMeter;
        x = 1;
        y = 1;
    }
}

@Override
public void render(float delta) {
    super.render(delta);
    camMap.translate(x,y,0);
    camMap.update();

    // Render Map
    map.render(camMap);

    // Render RayHandler
    map.renderRayHandler(camMap);

    // Render fore layers
    map.renderForeLayers(camMap);
}

Результат идеальный, когда я не изменяю размер.Но при изменении размера экрана получается странно: Изображение

Есть идеи, как правильно его реализовать?

...