2014-09-22 189 views
0

我在libgdx帧速率有问题,如果我做错了什么,alguin可以启发我,因为我不认为这是正常的,问题是我加载瓷砖地图和简单的,如果把最高分辨率320×320,800×600说这下降到12帧/秒左右,我希望解释得很好PUE腹股沟不是母语感谢。Libgdx问题帧速率(FPS)

public class MyGdxGame extends ApplicationAdapter { 

SpriteBatch batch; 
Texture img; 

private OrthogonalTiledMapRenderer bachTileMapRender; 
private OrthographicCamera camera; 
private TiledMap map; 

private int[] background = new int[] {0}, foreground = new int[] {1}; 

@Override 
public void create() { 

    batch = new SpriteBatch(); 

    img = new Texture("badlogic.jpg"); 

    map = new TmxMapLoader().load("maps/untitled.tmx"); 

    bachTileMapRender = new OrthogonalTiledMapRenderer(map, 1/32f);//Asignar mapa 

    camera = new OrthographicCamera(Gdx.graphics.getWidth(),Gdx.graphics.getHeight()); 
    camera.setToOrtho(false, 32, 32); //Virtual dimensiones 

} 

@Override 
public void render() { 
    Gdx.gl.glClearColor(1, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    //batch.begin(); 
    //batch.draw(img, 0, 0); 
    //batch.end(); 

    camera.update(); 

    bachTileMapRender.setView(camera); 
    bachTileMapRender.render(background); 

    System.out.println("fps:"+Gdx.graphics.getFramesPerSecond()); 



} 

}

320×320帧速率大约是60,但是爬上了窗口,或使用800×600迅速下降

public class DesktopLauncher { 
public static void main (String[] arg) { 
    LwjglApplicationConfiguration config = new LwjglApplicationConfiguration(); 

    config.width = 320; 
    config.height = 320; 
    new LwjglApplication(new MyGdxGame(), config); 
} 

} PD:这是值得我的电脑是双核3000,在debian linux中

untitled.tmx

<?xml version="1.0" encoding="UTF-8"?> 
<map version="1.0" orientation="orthogonal" width="32" height="32" tilewidth="32"  tileheight="32"> 
<tileset firstgid="1" name="prueba" tilewidth="32" tileheight="32"> 
<image source="title.png" width="384" height="128"/> 
</tileset> 
<layer name="Capa de Patrones 1" width="32" height="32"> 
<data encoding="base64" compression="zlib"> 
eJztwwEJAAAMBKHr8f17rsdQcNVUVVXV1w8ar2wB 
</data> 
</layer> 
</map> 
+0

你确定它只是在你改变分辨率下降吗?难道这是因为320 * 320具有不同的纵横比然后是800 * 600的缩放/拉伸? – Madmenyo 2014-09-22 11:19:45

+0

感谢您的回答,如果我更改了类DesktopLauncher config.width = 320; config.height = 320; 发生800 x 600或更高分辨率 – 2014-09-22 11:25:32

+0

奇怪,如果将其更改为800x800,该怎么办?如果这仍然运行良好,它必须与伸展有关,因为您将相机设置为800x800。另外为什么你将orthocamera.x设置为false?你应该使用camera.setToOrtho(800,800,false); – Madmenyo 2014-09-22 11:28:11

回答

0

如果你这样做?

//Swap these lines 
map = new TmxMapLoader().load("maps/untitled.tmx"); //first load map 
bachTileMapRender = new OrthogonalTiledMapRenderer(map); //then use map 

camera.setToOrtho(false, 800, 600); //X, Y, Z using the aspect ratio you want. 

//Gfx config 
config.width = 800; 
config.height = 600; 

此外,您要渲染多少个图块?

+0

我的LibGDX:void com.badlogic .gdx.graphics.OrthographicCamera。 setToOrtho(boolean yDown,float viewportWidth,float viewportHeight)Camera.setToOrtho(boolean ...,Float ...,Float ...) – 2014-09-22 11:50:03

+0

瓷砖31x31,分辨率32x32一块瓷砖 – 2014-09-22 11:56:47

+0

是的,你是正确的正交相机,对不起一阵子我猜。它必须与拉伸有关,因为在低分辨率下你会得到很好的结果。没有那么多的瓷砖,这应该不成问题。 – Madmenyo 2014-09-22 12:03:21

0

有可能,问题是TextureFilter
如果Texel s(Texture的像素)与它们在屏幕上使用的像素不匹配,则需要重新计算它们。
例如:你有一个16×16像素的Texture,它应该在屏幕上使用20 * 20像素。
TextureFilter然后定义如何计算屏幕上的像素。
有2个重要TextureFilter S:
- Nearest:获取最近的Texel
- Linear:获取的4个最近Texel小号

可以看到,该linear滤费用更多的性能。
所以,你应该尝试使用Nearest,这可能看起来并不那么好...
您可能会注意到,你可以设置2个TextureFilter S:
- 放大倍数:如果Texture较小,则地方需要在屏幕上,这个过滤器被使用
- 缩小:如果Texture比屏幕上的位置大,则使用此过滤器。

你也可以使用MipMapping,它可以让你有相同的Texture不同的分辨率,并使用最匹配的分辨率。

我会推荐阅读:Know Your Texture Filters!

+0

感谢您的回复,但正如我读了这篇文章似乎对我有趣,但纠正我,如果我错了,负责充电器瓷砖地图充电的纹理是不是通过textureAtlas充电,没有或没有访问过滤器类型。在文件中.pack – 2014-09-22 13:54:54

+0

该包描述了使用的纹理过滤器。但你不应该需要最近的过滤才能在桌面上流畅运行,只需一个简单的地图!也许你可以将.pack文件的前几行添加到你的问题中,以便我们看到它的设置。 – Tenfour04 2014-09-22 14:16:48

+0

gracias谢谢你的回复,我不使用这个产品.Pack测试文件只是一个问题,以前的建议,这里只是加载一张地图和纹理tilemap通过tilemap加载器在那里收取.tmx文件采用文件路径使用纹理创建平铺我想我 – 2014-09-22 14:24:24