I use ktx.
I have the code below:
abstract class BaseScreen(val game: PKGame) : KtxScreen {
val stage: Stage
init {
stage = PStage(ScreenViewport())
Gdx.input.inputProcessor = stage
}
override fun render(delta: Float) {
stage.act()
stage.draw()
}
override fun resize(width: Int, height: Int) {
stage.viewport.update(width, height, true)
}
override fun dispose() {
stage.dispose()
}
}
class LoadingScreen(game: PKGame): BaseScreen(game) {
val loadingState by lazy { scene2d.visLabel("Loading...") }
override fun show() {
TextureAssets.entries.forEach { game.assets.load(it) }
stage.actors {
visTable {
center()
setFillParent(true)
add(loadingState)
row()
visLabel("Click to start game")
}
}
}
override fun render(delta: Float) {
game.assets.update()
if (Gdx.input.isTouched && game.assets.isFinished) {
game.addScreen(MainMenu(game))
game.setScreen<MainMenu>()
game.removeScreen<LoadingScreen>()
dispose()
}
if (game.assets.isFinished) {
loadingState.setText("Finished")
}
debug { stage.actors.toString() }
super.render(delta)
}
}
Why it showed twice? And how can I fix this problem?

It is expected that the label "Click to start game" show just once.
I hove tried removing the code
if (game.assets.isFinished) {
loadingState.setText("Finished")
}
but it still happened.
Then, I tried removing add(loadingState) and it rendered as expected.