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

340 是我在 HTC Tattoo 上使用的基本 x(我手机上的 x 分辨率)。那么.....我怎样才能制作一个支持具有绝对值的大屏幕的功能。我不想更改 if 语句。

4

2 回答 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 值的变化,通过增加/减少的东西运行它。离本机越远,它就越大。当检查某物在某处或将某物放在某处时,始终将其编码为所需的分辨率,但在显示它或让它与程序的其余部分交互之前通过调整大小函数运行它。

于 2011-05-14T21:29:03.080 回答
3

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

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

更新: setViewPort 已修复,因此可以按预期工作。

于 2012-07-14T22:29:10.590 回答