(LibGdx)屏幕视口问题

时间:2017-10-15 16:34:51

标签: android camera libgdx viewport freeze

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

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

问题(最有可能) 我没先在游戏中使用相机或视口。(这会让游戏在手机上停一会儿而不是电脑)

后来我把相机和视口放在游戏中,但是后视口在高分辨率屏幕上显示的游戏场景太少(我使用1280x720用于视口和相机),现在游戏没有挂起或冻结但是场景很少可见

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

提前感谢任何建议

2 个答案:

答案 0 :(得分:1)

FitViewport,将宽高比保持scaling the world以适应屏幕,为剩余空间添加黑条(信箱),因此始终保持适合您的viewPort的常数对象。

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

enter image description here

我会建议使用ExtendViewprot,因为它通过向一个方向扩展世界来保持世界宽高比而没有黑条。

答案 1 :(得分:0)

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

这是问题的主要原因。

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

Android设备上的FPS从45降到30并且游戏运行缓慢。(虽然PC和移动设备显示相同数量的纹理)我使用ExtendViewport

有关于此的任何建议吗?

解决方案:只使用一个SpriteBatch无关紧要(因为我使用了多个错误因此滞后)