【发布时间】:2016-03-02 17:10:14
【问题描述】:
我已经尝试解决这个问题 3 周了。我开始使用 libgdx wiki 的视口,并浏览了这个论坛中关于视口、虚拟视口等的许多问题,并发现我的游戏的最佳解决方案是拥有 2 个视口:1 Fitviewport 用于我的游戏渲染(不使用舞台),以及我的 UI 的另一个 Screenviewport(使用舞台)。 UI 绘制得很完美,尽管我认为涉及 DPI 的问题有一个特定的问题,因为在三星 S4 上控件变得非常小并且它们几乎无法使用,但我会就此提出一个单独的问题。 我的问题是游戏渲染和 libgdx 上的 FitViewport。 我在实现 Screen 的 PlayScreen 构造函数上以这种方式设置游戏摄像机及其视口:
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();
然后在调整大小的方法中,我只有这 2 行:
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 尺寸的其他坐标创建我的世界,但我似乎无法找到可能的解决方案。 但我真正不明白的是为什么我会在排水沟线上看到子弹。
【问题讨论】:
标签: java libgdx viewport spritebatch