Так что я много читал о 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);
}
Результат идеальный, когда я не изменяю размер.Но при изменении размера экрана получается странно: Изображение
Есть идеи, как правильно его реализовать?