【问题标题】:Progress bar while loading Textures in AndEngine在 AndEngine 中加载纹理时的进度条
【发布时间】:2014-07-25 22:42:18
【问题描述】:

当我开始我的游戏时黑屏会出现一段时间,因为正在加载资源。 我仔细阅读了一个教程,该教程展示了如何在引导资源的同时显示进度条,现在我可以看到进度条了。但问题是当进度条可见时,其他一切都停止了。什么也没有发生。只有黑屏和一个进度条就可以了。谁能告诉我为什么每件事都被暂停以及为什么 loadresources 和 loadscene 方法不起作用?请提供解决方案。

【问题讨论】:

    标签: android andengine


    【解决方案1】:

    您需要在工作线程中加载资源。一个很好的实用工具是AsyncTask。指导主题 Processes and Threads 解释了为什么需要这样的东西,以及示例代码显示如何执行简单的 AsyncTask,这可能正是您所需要的。

    【讨论】:

    • 实际上是引擎自己加载资源。我的问题是,为什么引擎在有对话框或进度条时会暂停。我怎样才能手动恢复它。
    • @Jawad Amjad 在下面查看我的答案。希望它有所帮助;)
    【解决方案2】:

    来自 Engine.java:

    public void onDrawFrame(final GLState pGLState) throws InterruptedException {
            final EngineLock engineLock = this.mEngineLock;
    
            engineLock.lock();
            try {
                engineLock.waitUntilCanDraw();
    
                this.mVertexBufferObjectManager.updateVertexBufferObjects(pGLState);
                this.mTextureManager.updateTextures(pGLState);
                this.mFontManager.updateFonts(pGLState);
    
                this.onUpdateDrawHandlers(pGLState, this.mCamera);
                this.onDrawScene(pGLState, this.mCamera);
    
                engineLock.notifyCanUpdate();
            } finally {
                engineLock.unlock();
            }
        }
    

    这就是引擎挂起并且 UI 卡住的原因。可以在将纹理加载到硬件时显示加载屏幕,而不会冻结,比如ProgressBar。这并不容易,需要大量代码,但它是可能的,不需要疯狂的 hack,只需要一些逻辑。

    您需要有一个 Resources Manager (RM) 和一个 Scene Manager (SM) 一起工作(与AsyncTasks)并负责加载纹理对于当前场景。由于您有一个BaseGameActivity,您可以使用这个Activity 实例来显示带有进度条的全屏Dialog。逻辑是:

    1. 要求SM展示场景A
    2. SM 显示正在加载Dialog
    3. SM 异步告诉 RM 将所有 场景 A 资源加载到硬件中(对于场景 A 的每个纹理,texture.load)
    4. RM "onSceneTexturesLoadComplete" 告诉 SM 所有纹理都已加载

    由于 texture.load 不能保证纹理已实际加载,您需要有一个扩展 TimerTaskTryToDismissDialog。这个TryToDismissDialog 不时会查询Scene A纹理并检查它们是否实际加载:

    if (texturePack.getTexture().isLoadedToHardware()) {
            texturesLoaded++;
    }
    

    如果所有纹理都已加载,您将关闭 Dialog,然后您将看到场景准备就绪。
    希望对您有所帮助


    ps:这实际上涉及一些代码行,我刚刚在这里发布了一个快速步骤/指南/伪代码。我不会发布最终解决方案,因为它非常繁重且“与项目相关”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多