gpt4 book ai didi

java - libgdx 批处理在 FitViewport 之外绘制

转载 作者:太空宇宙 更新时间:2023-11-04 12:51:47 24 4
gpt4 key购买 nike

我已经尝试解决这个问题三周了。我开始使用 libgdx wiki 上的视口(viewport),并浏览了这个论坛中有关视口(viewport)、虚拟视口(viewport)等的许多问题,发现我的游戏的最佳解决方案是有 2 个视口(viewport):1 个 Fitviewport 用于我的游戏渲染(不使用舞台),另一个 Screenviewport 用于我的 UI(使用舞台)。UI 绘制得很完美,尽管我有一个具体问题,我认为涉及 DPI,因为控件在三星 S4 上渲染得非常小,而且几乎无法使用,但我会就此提出一个单独的问题。我的问题是 libgdx 上的游戏渲染和 FitViewport。我在实现 Screen 的 PlayScreen 构造函数上以这种方式设置游戏摄像机及其视口(viewport):

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();

然后在调整大小方法中我只有这两行:

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 似乎无法正常工作。当我在我的设备上尝试时,视口(viewport)适合,创建装订线,但我看不到相对于 Gdx.graphics 坐标绘制的玩家。 - 当我在桌面上以奇怪的分辨率进行测试时,我可以看到子弹被绘制到视口(viewport)之外,进入排水沟线。我不知道为什么会发生这种情况。

我相信我的问题可能是我应该创建与其他坐标相关的世界,这些坐标不是 Gdx.graphics 尺寸,但我似乎无法找到可能的解决方案。但我真正不明白的是为什么我能在排水沟中看到子弹。

最佳答案

我看到很多人都在为此苦苦挣扎,我必须承认我很早就为此苦苦挣扎了。但是一旦您了解了基础知识,就很容易实现。

让我们以FitViewport为例,当您初始化这个new FitViewport(float worldWidth, float worldHeight, camera)时,您正在指定世界坐标。这意味着无论如何,视口(viewport)都会绘制世界的给定部分。

  • 如果你的世界更大,它就不会吸引所有
  • 如果您的视口(viewport)位于屏幕边界之外,您将看不到全部内容
  • 如果您的视口(viewport)方面与所绘制的世界方面不相等,它将拉伸(stretch)。

我们还没有设置屏幕边界,所以让我们这样做:

vp.setScreenBounds(Gdx.graphics.getWidth() / 2, 0, Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight());

这里询问代表屏幕坐标的screenWidthscreenHeight。由于每个人都使用不同的屏幕,我们从图形本身得到它。您可以猜测它在哪里绘制视口(viewport);)。

无论如何,这个视口(viewport)new FitViewport(1920/2, 1080)将始终在屏幕的右半部分渲染我的世界的960 X 1080

如果我的世界是 .9f x 1.6f 大,那么我可以像这样 new FitViewport(.9f, 1.6f, camera) 初始化 vp。

PS:在开始绘图之前,不要忘记在 render() 中应用 VP。

关于java - libgdx 批处理在 FitViewport 之外绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35753792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com