LibGDX Активы зависимости снижают прогресс - PullRequest
1 голос
/ 21 марта 2019

Это скорее общий вопрос о самой платформе (в частности, AssetManager ), а не вопрос о коде.

Я работал над пользовательским загрузчиком, чтобы кэшировать эффект контура для моих атласов текстур, когда заметил, что индикатор загрузки в состоянии загрузки моего игры в определенный момент падает. Это был мой загрузчик, который требовал загрузки зависимостей: базовый атлас и шейдер (а также другой атлас для текстуры глубины).

Мой загрузчик выглядит так (в Котлине):

class OutlineLoader(
    resolver: FileHandleResolver
) : AsynchronousAssetLoader<OutlineAtlas, OutlineLoader.Parameter>(resolver) {
    override fun loadSync(manager: AssetManager, name: String, 
                          file: FileHandle, params: Parameter): OutlineAtlas {
        val sourceAtlas = assetManager.get<TextureAtlas>(name)
        val depthAtlas = assetManager.get<TextureAtlas>(params.depth)
        val shader = assetManager.get<ShaderProgram>(params.shader)

        return OutlineAtlas(sourceAtlas, depthAtlas, shader)
    }

    override fun getDependencies(name: String, file: FileHandle, 
                                 params: Parameter) =
            Array<AssetDescriptor<*>>().also { array ->
                listOf(
                        AssetDescriptor(name, TextureAtlas::class.java),
                        AssetDescriptor(params.depth, TextureAtlas::class.java),
                        AssetDescriptor(params.shader, ShaderProgram::class.java)
                ).forEach(array::add)
            }


    ...
}

Итак, я ставлю в очередь некоторые активы, а потом использую их. Выход Logger от AssetManager подтверждает это. Тем не менее, прогресс идет до 25%, затем до 20%; до 60%, затем до 33%. Я вставил оператор debug-print, чтобы наблюдать за прогрессом загрузки после каждого вызова assetManager.update(), и это примерно так:

[AssetManager] Queued: sprites/sprites.atlas, foo.bar.OutlineAtlas
[AssetManager] Loading: sprites/sprites.atlas, foo.bar.OutlineAtlas
[DEBUG] Loading: 0%
[AssetManager] Loading dependency: sprites/sprites.atlas, com.badlogic.gdx.graphics.g2d.TextureAtlas
[AssetManager] Loading dependency: sprites/depth.atlas, com.badlogic.gdx.graphics.g2d.TextureAtlas
[AssetManager] Loading dependency: shader/depth.frag, com.badlogic.gdx.graphics.glutils.ShaderProgram
[DEBUG] Loading: 0%
[AssetManager] Loaded: 20.16505ms shader/depth.frag, com.badlogic.gdx.graphics.glutils.ShaderProgram
[DEBUG] Loading: 25%
[AssetManager] Loading dependency: sprites/depth.png, com.badlogic.gdx.graphics.Texture
[DEBUG] Loading: 20%
[AssetManager] Loaded: 20.56412ms sprites/depth.png, com.badlogic.gdx.graphics.Texture
[DEBUG] Loading: 40%
[AssetManager] Loaded: 85.70349ms sprites/depth.atlas, com.badlogic.gdx.graphics.g2d.TextureAtlas
[DEBUG] Loading: 60%
[AssetManager] Loading dependency: sprites/sprites.png, com.badlogic.gdx.graphics.Texture
[AssetManager] Loading dependency: sprites/sprites2.png, com.badlogic.gdx.graphics.Texture
[AssetManager] Loading dependency: sprites/sprites3.png, com.badlogic.gdx.graphics.Texture
[AssetManager] Loading dependency: sprites/sprites4.png, com.badlogic.gdx.graphics.Texture
[DEBUG] Loading: 33%
[AssetManager] Loaded: 72.27248ms sprites/sprites4.png, com.badlogic.gdx.graphics.Texture
[DEBUG] Loading: 44%
[AssetManager] Loaded: 116.72272ms sprites/sprites3.png, com.badlogic.gdx.graphics.Texture
[DEBUG] Loading: 56%
[AssetManager] Loaded: 165.29959ms sprites/sprites2.png, com.badlogic.gdx.graphics.Texture
[DEBUG] Loading: 67%
[AssetManager] Loaded: 237.17233ms sprites/sprites.png, com.badlogic.gdx.graphics.Texture
[DEBUG] Loading: 78%
[AssetManager] Loaded: 341.5768ms sprites/sprites.atlas, com.badlogic.gdx.graphics.g2d.TextureAtlas
[DEBUG] Loading: 89%
[AssetManager] Loaded: 405.7238ms sprites/sprites.atlas, foo.bar.OutlineAtlas

Поиск в источниках, я не могу понять, является ли это преднамеренным или я слепо делаю что-то глупое? (Я также не смог найти что-то о теме в вики).

РЕДАКТИРОВАТЬ: Операторы отладки-печати выглядит следующим образом:

if (!assetManager.update()) {
    val progress = "${assetManager.progress * 100f}%"
    Gdx.app.debug("[DEBUG]", progress)
} else { ... }

Что просто AssetManager.getProgress() в Java.

...