#kotlin #libgdx
#kotlin #libgdx
Вопрос:
Это скорее общий вопрос о самой платформе (в частности, о AssetManager), а не вопрос о коде.
Я работал над пользовательским загрузчиком для кэширования эффекта контура для моих текстурных атласов, когда заметил, что индикатор выполнения в состоянии загрузки моей игры в какой-то момент падает в процентах. Это был мой загрузчик, который требовал загрузки зависимостей: базового атласа и шейдера (а также другого атласа для текстуры глубины).
Мой загрузчик обычно выглядит следующим образом (в Kotlin):
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)
}
...
}
Итак, я ставлю некоторые ресурсы в очередь и позже использую их. Выходные данные регистратора 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
Просматривая исходные тексты, я не могу понять, намеренно это или я слепо делаю что-то глупое? (Мне также не удалось найти что-либо по этой теме в wiki).
РЕДАКТИРОВАТЬ: Инструкции Debug-print выглядят следующим образом:
if (!assetManager.update()) {
val progress = "${assetManager.progress * 100f}%"
Gdx.app.debug("[DEBUG]", progress)
} else { ... }
Это только AssetManager.getProgress()
в Java.
Комментарии:
1. Покажите, как вы вычисляете процент
2. @icarumbas Я отредактировал вопрос. На самом деле я ничего не вычисляю, отсюда и вопрос о самом AssetManager .