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 屏幕分辨率的主要内容,如果未能解决你的问题,请参考以下文章