gpt4 book ai didi

java - libGDX:FitViewport 中对象的大小扭曲

转载 作者:行者123 更新时间:2023-12-02 02:57:04 24 4
gpt4 key购买 nike

我的目标是使用 FitViewport 创建一款始终以 9:16 的纵横比(基本上是 16:9,但直立)显示的游戏;它应该独立于目标设备的分辨率。为了测试此设置,我创建了以下最小工作示例。绿色小方 block 表示坐标系的原点:

MyGame.java

public class MyGame extends ApplicationAdapter {

final int WORLD_WIDTH = 900;
final int WORLD_HEIGHT = 1600;
Stage stage;
Viewport vp;

public void create() {
stage = new Stage();
vp = new FitViewport(WORLD_WIDTH, WORLD_HEIGHT, stage.getCamera());
stage.setViewport(vp);
stage.addActor(new MySquare());
}

public void render() {
stage.act();
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.draw();
}

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

// dispose...
}

MySquare.java

public class MySquare extends Actor {
ShapeRenderer renderer = new ShapeRenderer();
@Override
public void draw(Batch batch, float alpha){
batch.end();
renderer.begin(ShapeRenderer.ShapeType.Filled);
renderer.setColor(Color.GREEN);
renderer.rect(0, 0, 50, 50);
renderer.end();
batch.begin();
}
}

不幸的是,结果并不如预期:正如你所看到的,绿色方 block 实际上不是一个方 block 。对于 Windows 和 Android(横向模式),此行为是相同的:

enter image description here

但是,当通过 DesktopLauncher.java 中的 LwjglApplicationConfiguration 以编程方式显式设置窗口大小为有效的 9:16 分辨率时,绿色方 block 正确显示。这是为什么?我怎样才能避免这种解决方法(无论如何它不适用于 Android)?

最佳答案

您的问题是您的形状渲染器忽略了相机。像这样更新它:

public void draw(Batch batch, float alpha){
batch.end();
renderer.setProjectionMatrix(batch.getProjectionMatrix()); // <<<<< Add this
renderer.begin(ShapeRenderer.ShapeType.Filled);
renderer.setColor(Color.GREEN);
renderer.rect(0, 0, 50, 50);
renderer.end();
batch.begin();
}

如果您计划最终使用 Sprite ,并且您只是想要为角色提供矩形占位符,则不需要为此使用自定义角色。您可以使用通用 Actor 并对其调用 setDebug(true),Stage 将使用内部 ShapeRenderer 自动绘制其轮廓。当然,您必须首先设置Actor的大小和位置。

关于java - libGDX:FitViewport 中对象的大小扭曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42912551/

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