所以我的 libgdx 项目遇到了性能问题,我将其追踪到地图渲染。我通过创建一个空项目来隔离问题,并尽可能少地做地图渲染。这是我想出的代码:
桌面启动项目类:
package com.me.test;
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
public class Main {
public static void main(String[] args) {
LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
cfg.title = "performanceTest";
cfg.useGL20 = false; // doesn't make a difference...
cfg.width = 1080;
cfg.height = cfg.width/12 * 9; // 810
new LwjglApplication(new Test(), cfg);
}
}
实际代码:
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.maps.tiled.TmxMapLoader;
import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer;
public class Test implements ApplicationListener {
private OrthographicCamera camera;
private com.badlogic.gdx.maps.tiled.TiledMap map;
private static OrthogonalTiledMapRenderer renderer;
@Override
public void create() {
float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();
camera = new OrthographicCamera(w, h);
TmxMapLoader maploader = new TmxMapLoader();
map = maploader.load("test.tmx");
renderer = new OrthogonalTiledMapRenderer(map, 1);
renderer.setView(camera);
}
@Override
public void dispose() {
renderer.dispose();
map.dispose();
}
@Override
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
renderer.render();
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}
现在奇怪的是:不仅 CPU 使用率高得离谱,而且当必须渲染超过 128 个时,它也会出现跳跃。在 129 块以下,性能始终相同。(仅此过程大约需要 2-4%)但是渲染 129 个或更多图块大约需要 40-60%!现在我的问题是:为什么会这样?难道我做错了什么?我无法想象来自 libgdx 的渲染器会有如此致命的缺陷......并且只在屏幕上使用 128 个图块制作游戏不是一种选择:)
感谢您的任何答案或想法!
环境:
- Eclipse 开普勒服务版本 1
- libgdx 版本 0.9.9
- Windows 7的
- 图形芯片:NVIDIA GeForce GTX 560 Ti
- CPU:奔腾双核2.70GHz
渲染 128 块瓷砖:
渲染 129 块瓷砖: