0

そのため、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 を超えるレンダリングが必要になると、CPU 使用率が急上昇します。129 タイル未満では、パフォーマンスは常に同じです。( この処理だけで 2~4% かかります ) しかし、129 個以上のタイルをレンダリングすると 40~60% かかります! 今私の質問は:それはなぜですか?私は何か間違ったことをしていますか?libgdx のレンダラーにこのような致命的な欠陥があるとは想像できません...そして、画面上で 128 個のタイルのみを使用してゲームを作成することは選択肢ではありません :)

答えや考えをありがとう!

環境:

  • Eclipse ケプラー サービス リリース 1
  • libgdx バージョン 0.9.9
  • ウィンドウズ7
  • グラフィックチップ: NVIDIA GeForce GTX 560 Ti
  • CPU: Pentium デュアルコア 2.70GHz

128 タイルのレンダリング:

128 タイルのレンダリング

129 タイルのレンダリング:

129 タイルのレンダリング

4

1 に答える 1

2

私は解決策を得ました:

追加するだけ

Mesh.forceVBO=true;

アプリ起動前。

まず第一に、これはおそらくハードウェアの問題です。他のコンピューターではすべてがスムーズに実行されますが、同じ問題が発生したコンピューターが他にもあります。BadlogicGames フォーラムで、私は答えを見つけました。詳細は次のとおりです。

Badlogic フォーラムの投稿

于 2014-02-19T22:14:13.153 に答える