2011-05-13 129 views
4

如何支持libgdx(制作算法)以支持多屏幕分辨率?我使用if statments与像参数所做的HTC纹身我的应用程序的工作:Android libgdx大屏幕分辨率

if (Gdx.input.getX()==40) { 

什么是好的算法制作上更大的屏幕这项工作? 我试过,但没有任何结果:

publis static int translatex() { 
    float p = (float)Gdx.graphics.getHeight()*340; 
    return (int) p*Gdx.input.getX(); 
} 

340是宏达纹身使用我的底数x(我的手机在x分辨率)。 那么.....我怎么才能做出一个支持绝对值大屏幕的功能。我不想改变if语句。

回答

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值的变化增加/减少。它来自本土越大,它会越大。当检查某个地方或某处时,总是将其编码为您想要的分辨率,但是在显示它之前通过调整大小函数来运行它,或者让它与其余的程序进行交互。

+0

有关实现的示例,请参阅libgdx wiki上的我的StringBuild教程。 – Remm 2011-05-14 21:30:40

+0

什么是startWidth?并且resize函数有2个参数int width,int height,startWidth是宽度吗? – Felix 2011-05-15 08:48:48

+0

在调整大小之前,起始宽度/高度将是原生纹理的大小。新的宽度和高度是相对于changeX和changeY的增加。边界仅仅是一个矢量2,它支持对角的位置,所以你可以很容易地知道对象的边界。 要创建的调用对象 - >获取所有初始值,例如位置,宽度,高度 - >使用resize()函数转换它们 - >将纹理绘制到屏幕上。当你需要知道纹理的基本尺寸,以便你可以正确拉伸它时,我们会在使用textureRegions的情况下保持startHeight和height分开。 – Remm 2011-05-15 15:35:44

3

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

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

更新: setViewPort是固定的,所以这个工作正如所料。