加载纹理后应用程序变短并且不受控制冻结

时间:2013-01-07 14:53:28

标签: android opengl-es 2d textures libgdx

使用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 个答案:

答案 0 :(得分:0)

此:

MainClass.manager.finishLoading();

可能就是您的时间进度(虽然我不确定,因为您没有显示MainClass.manager定义,并且您没有显示从renderloadAtlas的调用图表。您需要在后台加载资源(请参阅manager.update())。 <{1}}将阻止当前线程(渲染线程),直到加载所有资产。

这意味着您需要在加载资源之前在渲染线程上“渲染”。通常,这是通过显示“加载”屏幕来完成的。请参阅此问题:How to properly load textures using the libgdx assetmanager