Libgdx Box2d 屏幕分辨率

Posted

技术标签:

【中文标题】Libgdx Box2d 屏幕分辨率【英文标题】:Libgdx Box2d screen resolution 【发布时间】:2015-08-27 16:41:39 【问题描述】:

我读过一些关于其他人如何处理不同屏幕分辨率的文章,但我仍然很困惑。

如果我有想要使用的高分辨率图像和精灵,我应该使用 1080x1920 之类的屏幕,而不是创建一些缩小分辨率屏幕的方法吗?还是我应该尝试将其压缩到某个中间分辨率并根据需要放大和缩小?

还有谁能给我一个很好的例子来说明如何缩放不同的分辨率?例如,我会看到我的播放器精灵和我的原始屏幕之间的比例(比如说宽度和高度的 1/6),当分辨率改变时我只是试图保持这个比例?还是有更好的方法来做到这一点?

我还在使用 Box2d 进行物理和其他事情,因为我已经必须使用每米像素转换来在两者之间进行转换。

【问题讨论】:

处理不同的视口主要基于您认为最适合您的游戏的内容。有一个完整的section in libgdx wiki page。 通常你的游戏有一个固定大小,然后改变视口以适应随机窗口大小的放大或缩小。 【参考方案1】:

借助Viewports 和Scene2d Stages,您不必创建自己的机制,老实说根本不必关心分辨率。

视口定义了由于分辨率变化而调整大小时如何处理屏幕 - 如果它应该拉伸?或者也许保持不变?有很多种视口(每种视口都只是另一个类,因此您要选择视口来创建所选类的对象),每种视口都有自己的行为。

您可以在此处阅读有关 Viewport 的更多信息:

https://github.com/libgdx/libgdx/wiki/Viewports

舞台是一种抽象的表现形式——让我们想想剧院中的舞台和舞台上的演员。舞台只是您在渲染部分中绘制的一种对象处理程序。演员是图像、标签、按钮等。

您可以在此处阅读有关 Stage 的更多信息:

您所要做的就是创建一个舞台,将您的演员(按钮、图像、标签...)添加到其中并将其设置为您的自定义视口。

    public GameScreen(Main game)
    
        super(game);

        viewport = new ExtendViewport(this.screenWidth, this.screenHeight); // viewport definition is ExtendViewport viewport; screenWidth and Height are defined width and height of your screen

        stage = new MyStage(); //stage definition is Stage stage;
        stage.setViewport(this.viewport);
    

    @Override
    protected void show()
       
        ...

        stage.addActor( someLabel ); //someLabel definition is Label someLabel; and it is created somewhere before

        ...
    

    @Override
    public void render(float delta) 
                   
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        this.viewport.update(this.screenWidth, this.screenHeight);
        this.stage.act();
        this.stage.draw();
    

    @Override
    public void resize(int width, int height) 
    
        //you need this function to keep screen size updated
        this.screenWidth = width;
        this.screenHeight = height;
    

现在关于您的精灵大小 - 如果它是移动应用程序,那么拥有非常非常大的资源并不是很好 - 大多数移动设备的分辨率都很小,因此在您的应用程序中保留大文件并不好 - 记住这一点占用磁盘空间。

【讨论】:

以上是关于Libgdx Box2d 屏幕分辨率的主要内容,如果未能解决你的问题,请参考以下文章

开源java游戏框架libgdx专题-10-核心库-Viewport

如何自定义设置屏幕分辨率?

Linux系统怎么更改屏幕分辨率

调整VMware中Linux虚拟机屏幕分辨率

为啥屏幕的分辨率突然自己变了

安卓手机屏幕分辨率怎么调整?