Ich habe jetzt endgültig die Nase voll gehabt, und mir einen extra Layer für das Rendern in LibGDX gebastelt. Da Performance bei mir nicht so sehr das Problem ist, kann ich es auch ziemlich einfach halten. Beispiel der alten Schreibweise (schon mit einigen Hilfsfunktionen):
override fun drawBackground(batch: Batch, parentAlpha: Float) {
batch.draw(Assets.dialog, bounds.x, bounds.y, bounds.width, bounds.height)
batch.useFont(Assets.russelSquare, 0.5F, Color.GOLD) {
draw(batch, title, bounds.x + bounds.width / 2F - titleWidth / 2F, bounds.y + bounds.height - titleHeight)
}
batch.end()
withLineSR(sr) {
color = Color.GOLD
rect(bounds)
val lineHeight = bounds.y + bounds.height - titleHeight - 40F
line(bounds.x, lineHeight, bounds.x + bounds.width, lineHeight)
}
batch.begin()
}
Das kann nur jemand gut finden, dessen Lieblingsfach im Studium Buchhaltung war. Und hier die neue Version:
override fun render() = arrayOf(
Picture(Assets.dialog, bounds),
Text(title, at(bounds.x + w2 - titleWidth / 2F, bounds.y + bounds.height - titleHeight), 0.5F, Color.GOLD),
Rect(bounds, Color.GOLD),
Line(at(bounds.x, lineHeight), at(bounds.x + bounds.width, lineHeight), Color.GOLD)
)
Ich hoffe, ihr erkennt eine gewisse Verbesserung. Im Hintergrund arbeitet eine Klasse die ganzen Zeichenobjekte ab, und macht dabei das Batch
und den ShapeRenderer
automatisch auf und zu u.s.w.