(LibGdx) 屏幕视口问题

(LibGdx) Screen viewport issue

这与 Libgdx 有关。 我正在开发一款逻辑上正确的游戏。

问题: 在 PC 上玩游戏 运行s 时看起来不错 (FPS 61) 但是当 运行 在 android 上时(FPS 从 47 到 30 不断下降)(注 5)它非常慢并且在一段时间后冻结并关闭(屏幕上出现太多东西)

问题(很有可能) 我没有先在游戏中使用相机或视口。(这使得游戏在 phone 但不是 pc 上挂了一段时间)

后来我在游戏中放置了摄像头和视口,但是视口在高分辨率屏幕上显示的游戏场景太少(我为视口和摄像头使用了 1280x720),现在游戏不会挂起或冻结,但可以看到的场景非常少

所有 res 设备的视口和相机设置应该是什么?(欢迎提供示例)

提前感谢您的任何建议

FitViewport,将宽高比保持 scaling the world 以适合屏幕,为剩余的 space 添加黑条(黑边),因此适合的对象数量始终恒定你的视口。

public class GdxTest extends ApplicationAdapter{

    private FitViewport fitViewport;
    private SpriteBatch spriteBatch;
    private OrthographicCamera camera;
    private float virtualWidth=640,virtualHeight=400;
    private Texture texture,bg;
    private Sprite Sprite;

    @Override
    public void create() {

        spriteBatch=new SpriteBatch();
        camera=new OrthographicCamera();
        fitViewport=new FitViewport(virtualWidth,virtualHeight,camera);

        texture=new Texture("badlogic.jpg");        // having dimension of 256 X 256
        bg=new Texture("pixel.png");

        Sprite=new Sprite(bg);
        Sprite.setColor(Color.GOLD);
        Sprite.setSize(virtualWidth,virtualHeight);
    }

    @Override
    public void render() {

        Gdx.gl.glClearColor(0,0,0,1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        spriteBatch.setProjectionMatrix(camera.combined);
        spriteBatch.begin();
        Sprite.draw(spriteBatch);
        spriteBatch.draw(texture,0,0);
        spriteBatch.end();
    }

    @Override
    public void resize(int width, int height) {
        fitViewport.update(width, height,true);
    }

    @Override
    public void dispose() {
        spriteBatch.dispose();
        texture.dispose();
        bg.dispose();
    }
}

我会推荐 ExtendViewprot 使用,因为它通过在一个方向上扩展世界来保持世界纵横比没有黑条。

终于解决了。问题是我将相机和视口分辨率设置为 Gdx.Graphics.getHeight() 和 width()... 这得到了设备的高度和宽度。

因此是问题的主要原因。

我需要做的是像@Abhishek 指出的那样将相机和视口分辨率设置为 virtualResolutions(自己想要的高度 x 宽度)。 修复此问题后,PC 和 android 设备显示相同的屏幕,但

android 设备上的 FPS 从 45 下降到 30,游戏运行缓慢。(尽管 PC 和移动设备显示相同数量的纹理)我正在使用 ExtendViewport

有什么建议吗?

解决方案:不管怎样都只使用一个 SpriteBatch(我错误地使用了多个 SpriteBatch,因此滞后)