我已经阅读了一些关于其他人如何处理不同屏幕分辨率的内容,但我仍然非常困惑。
如果我有想要使用的高分辨率图像和精灵,我是否应该使用类似1080x1920的屏幕,而不是创建一些缩小屏幕以降低分辨率的屏幕?或者我应该尝试将其压缩到某个中间地面分辨率并根据需要进行放大和缩小?
还有谁能给我一个很好的例子来说明如何针对不同的分辨率进行缩放?例如,我会看看我的播放器精灵和原始屏幕之间的比例(比如宽度和高度的1/6),当分辨率发生变化时,我只是想保持这个比例吗?或者有更好的方法吗?
还有一件事我也在使用Box2d来处理物理和东西,以防万一我必须使用每米像素转换才能在两者之间进行。
答案 0 :(得分:1)
您不必创建自己的机制,说实话,由于视口和Scene2d 阶段,根本不需要关心解决方案。
Viewport是一种定义如何在调整大小时处理屏幕因为分辨率变化 - 如果应该拉伸?或者可能保持固定?有很多种类的视口(并且每种类型只是另一个类,因此您选择创建选择类对象的视口类型)并且每种类型都有自己的行为。
您可以在此处阅读有关Viewport的更多信息:
https://github.com/libgdx/libgdx/wiki/Viewports
舞台是一种表现抽象 - 让我们考虑戏剧中的舞台和演员。舞台只是一个对象 - 您在渲染部分绘制的一种处理程序。演员是你的图像,标签,按钮等。
您可以在此处详细了解舞台:
您所要做的就是创建舞台,您将添加演员(按钮,图像,标签......)并将其设置为自定义视口。
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;
}
现在关于你的精灵的大小 - 如果它是移动应用程序,拥有非常大的资源并不是很好 - 大多数移动设备都有小分辨率,所以在你的应用程序中保留大文件并不好 - 记得它占用光盘空间。