我一直试图解决这个问题已有3个星期了。我开始使用libgdx wiki关于它的视口,并在这个论坛中浏览关于视口,虚拟视口等的许多问题,并发现我的游戏的最佳解决方案是有2个视口:1 Fitviewport for my game rendering(不使用stage),另一个Screenviewport用于我的UI(使用Stage)。 尽管我有一个特定的问题,但我有一个特定的问题,我认为涉及DPI导致控件在三星S4上渲染得非常小而且它们几乎无法使用,但是我会另外提出一个问题。 我的问题在于游戏渲染和libgdx上的FitViewport。 我在PlayScreen构造函数上以这种方式设置游戏相机及其视口,该构造函数实现了Screen:
gameCamera = new OrthographicCamera();
gameCamera.setToOrtho(false);
gameViewport = new FitViewport(800, 480,gameCamera);
然后在渲染方法上我这样应用:
input(Gdx.graphics.getDeltaTime());
update(Gdx.graphics.getDeltaTime());
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
gameCamera.update();
uiCamera.update();
MyGame.batch.setProjectionMatrix(gameCamera.combined);
gameViewport.apply();
MyGame.batch.begin();
//DRAW CODE AFTER THIS
MyGame.batch.end();
//apply stage ScreenViewport and draw:
game.stage.getViewport().apply();
game.stage.draw();
然后在resize方法中我只有这两行:
game.stage.getViewport().update(width,height,true);
gameViewport.update(width,height);
gameCamera.position.set(Gdx.graphics.getWidth()/2,Gdx.graphics.getHeight()/2,0);
绘图方法基于Gdx.graphics.getHeight()和Gdx.graphics.getWidth()坐标。 我的游戏世界是一个自上而下的射击游戏,它使用Gdx.graphics.getWidth()和getHeight()来生成生物并限制玩家的移动。
我的问题再次出现如下: - FitViewport似乎没有正常工作。当我在我的设备上尝试它时,视口适合,创建阴沟线,但我无法看到相对于Gdx.graphics坐标绘制的玩家。 - 当我在具有奇怪分辨率的桌面上进行试驾时,我可以看到在视口外部绘制的子弹进入阴沟线。我不知道为什么会这样。
我相信我的问题可能是我应该创建与其他坐标相关的世界,这些坐标不是Gdx.graphics维度,但我似乎无法找到一个可能的解决方案。 但我真不理解的是为什么我能看到排水沟中的子弹。
答案 0 :(得分:0)
我看到很多人都在努力解决这个问题,我必须承认我过早地努力了。但是一旦你理解了基础知识,它就很容易实现。
让我们array
,当您初始化此FitViewport
时,您正在指定世界坐标。这意味着视口将绘制世界上给定的部分,无论如何。
我们尚未设置屏幕范围,所以让我们这样做:
new FitViewport(float worldWidth, float worldHeight, camera)
这里要求vp.setScreenBounds(Gdx.graphics.getWidth() / 2, 0, Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight());
和screenWidth
代表屏幕坐标。由于每个人都使用不同的屏幕,我们从图形本身得到它。你可以猜到它在哪里绘制视口;)。
无论如何,此视口screenHeight
将始终在屏幕的右半部分呈现new FitViewport(1920 / 2, 1080)
我的世界。
如果我的世界960 X 1080
大,那么我可以像.9f x 1.6f
一样初始化vp。
PS:
在开始绘图之前,不要忘记在new FitViewport(.9f, 1.6f, camera)
中应用VP。