我在libgdx中遇到帧速率问题,如果我做错了,alguin可以启发我,因为我不认为这是正常的,问题是我加载了一个tilemap并且简单而且如果放了最高分辨率320 x 320,800 x 600说这降到12 fps左右,我希望能够很好地解释PUE腹股沟不是母语谢谢。
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 x 320帧速率约为60,但爬上窗户或快速使用800 x 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);
}
} P.D:值得我的电脑是双核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 :(得分: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;
另外,你渲染了多少个瓷砖?
答案 1 :(得分:0)
问题可能是TextureFilter
如果Texel
s(Texture
的像素)与他们在屏幕上使用的像素不匹配,则需要重新计算它们。
例如:你有Texture
16 * 16像素,然后在屏幕上使用20 * 20px。
TextureFilter
然后定义如何计算屏幕上的像素
有两个重要的TextureFilter
s:
- Nearest
:获取最近的Texel
- Linear
:获取最近的Texel
s
您可以看到,linear
过滤器的性能要高得多
所以你应该尝试使用Nearest
,这看起来不太好......
您可能会注意到,您可以设置2 TextureFilter
s:
- 放大倍数:如果Texture
小于屏幕上显示的位置,则使用此过滤器
- 缩小:如果Texture
大于屏幕上的位置,则使用此过滤器。
您也可以使用MipMapping
,这样您就可以使用相同Texture
的不同分辨率,并使用最匹配的分辨率。
我建议您阅读:Know Your Texture Filters!