0

libGDX プラットフォームを使用します。テクスチャをロードした後、アプリケーションが短くなり、フリーズを制御できなくなります。

    @Override
public void render() {
    float deltaTime = Gdx.graphics.getDeltaTime();

    if (IS_LOG_ENGINE_SPEED_INFO) {
        startTickCount = System.currentTimeMillis();
        runingAppTime += deltaTime;
    }
    if (sceneDirector.sceneUpdate()) {
        deltaTime = 0;
        if (!manager.update()) {
            Gdx.app.log("aaa", "Skip!");
            return;
        }
    }
    sceneDirector.getCurScene().updateLogic(deltaTime);
    if (IS_LOG_ENGINE_SPEED_INFO) {
        logStr = (System.currentTimeMillis() - startTickCount) + ", ";
        startTickCount = System.currentTimeMillis();
    }

    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    batch.setProjectionMatrix(camera.combined);

    sceneDirector.getCurScene().updateGraph(batch);

    if (IS_LOG_ENGINE_SPEED_INFO) Gdx.app.log("aaa", logStr + (System.currentTimeMillis() - startTickCount));
}

私がすべきこと: シーンを変更した場合 - メソッド sceneDirector.sceneUpdate () を実行すると、テクスチャがロードされます。テクスチャ読み込み機能:

    public static void loadAtlas(String pngFileName, String xmlFileName, Scene scene) {

    MainClass.manager.load(pngFileName, Texture.class);
    MainClass.manager.finishLoading();
    Texture texture = MainClass.manager.get(pngFileName, Texture.class);
    scene.textures.add(texture);
    texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
    ...

そして、最終的に何が得られるのでしょうか... ローディングメソッドは正しく機能します。グラフィックスのレンダリングは、テクスチャのロード時のみです。これは、アプリケーションを示すログによって確認されます。

01-07 16:38:50.509: INFO/aaa(27259): LogicTime: 1712, GraphTime: 145
01-07 16:38:50.559: INFO/aaa(27259): LogicTime: 0, GraphTime: 38
01-07 16:38:50.559: INFO/aaa(27259): LogicTime: 0, GraphTime: 1
01-07 16:38:50.569: INFO/aaa(27259): LogicTime: 0, GraphTime: 3
01-07 16:38:50.579: INFO/aaa(27259): LogicTime: 1, GraphTime: 1
01-07 16:38:50.589: INFO/aaa(27259): LogicTime: 0, GraphTime: 1
01-07 16:38:50.609: INFO/aaa(27259): LogicTime: 2, GraphTime: 2
01-07 16:38:50.629: INFO/aaa(27259): LogicTime: 0, GraphTime: 1
01-07 16:38:50.649: INFO/aaa(27259): LogicTime: 0, GraphTime: 4

しかし!1 回目と 2 回目のグラフィック更新に時間がかかるのはなぜですか? グラフィックをロードするとすぐにシーンでアクションが開始されるため、この質問は重要です。

4

1 に答える 1

0

これ:

MainClass.manager.finishLoading();

おそらくあなたの時間はどこに行くのでしょう(ただし、MainClass.manager定義を表示せず、呼び出しグラフからからrenderへを表示しないため、わかりませんloadAtlas)。バックグラウンドでアセットをロードする必要があります (「 」を参照manager.update())。 finishLoadingすべてのアセットが読み込まれるまで、現在のスレッド (レンダリング スレッド) をブロックします。

これは、アセットがロードされる前にレンダリング スレッドで「レンダリング」する必要があることを意味します。通常、これは「ロード」画面を表示することによって行われます。この質問を参照してください: libgdx assetmanager を使用してテクスチャを適切にロードする方法

于 2013-01-07T17:41:57.487 に答える