Android libgdx大屏幕分辨率

时间:2011-05-13 06:53:22

标签: android libgdx

我如何支持(制作算法)libgdx以支持多屏分辨率?我让我的应用程序在HTC Tattoo上使用if参数如下的语句:

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语句。

2 个答案:

答案 0 :(得分: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);

}

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

答案 1 :(得分:3)

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

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

更新: setViewPort已修复,因此效果与预期一致。