安卓libgdx大屏幕分辨率

4
如何为libgdx提供支持多屏幕分辨率的算法?我使用if语句和参数在HTC Tattoo上使我的应用程序工作,例如:
if (Gdx.input.getX()==40) {

什么算法适用于更大的屏幕? 我尝试了以下方法,但没有任何结果:
publis static int translatex() {
     float p = (float)Gdx.graphics.getHeight()*340;
     return (int) p*Gdx.input.getX();
}

在我的HTC Tattoo手机上,340是我使用的基础x值(即x分辨率)。 那么......我如何编写一个支持绝对值的大屏幕函数呢?我不想改变if语句。

2个回答

14

这很简单。你可以基本上按照你本地分辨率构建整个程序,但在所有涉及位置和纹理大小的方面,都要像这样做:

private void resize()
{
    float x = Gdx.graphics.getWidth();
    float y = Gdx.graphics.getHeight();

    float changeX = x / assumeX; //being your screen size that you're developing with
    float changeY = y / assumeY;

    position = new Vector2(position.x * changeX, position.y * changeY);
    width = startWidth * changeX;
    height = startHeight * changeY;
    bounds = new Vector2 (position.x, (Gdx.graphics.getHeight() - position.y) - height);

}

基本上你正在做的是,将生成的每个对象都通过某些方式运行,根据分辨率中x/y值的变化来增加/减少。它距离原生越远,它就会越大。在检查某些东西是否存在或将某些东西放置在某处时,始终将其编码为所需的分辨率,但在显示它或让它与程序的其余部分进行交互之前,运行它通过调整大小的函数。


关于此实现的示例,请参考我在libgdx维基上的StringBuild教程。 - Remm
你能否提供一些代码?我不是以英语为母语的人。 - Felix
对于一个2D游戏,我发现直接在正交相机上设置缩放比例要容易得多。通常我会以1080p为目标,然后根据需要进行缩放。 - dreamwagon
@Remm,您提供的链接已经失效了。我找不到替代品。您知道这个链接现在在哪里吗? - prolink007
很遗憾,看起来他们改变了他们的维基,并决定不再使用它。然而我的例子已经有2年了,所以我不确定它是否已经过时。他们的维基是https://github.com/libgdx/libgdx/wiki/Introduction - 很抱歉我不能提供更多帮助,我已经很久没有使用libGDX了。 - Remm
显示剩余3条评论

3

请参考http://www.java-gaming.org/index.php?topic=25685.0中更优雅的解决方案(还需查看Nate对该解决方案的评论)。

另外,如果您使用scene2d,请注意目前(libgdx 0.9.6)stage.setViewport方法应具有此功能,但实际上它并不像人们期望的那样运行。

更新:setViewPort已修复,因此它可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接