Die Main.kt
(genauer: die Funktion main()
) stellt den Einstiegspunkt für das Programm dar. Hier wird die Engine initialisiert und konfiguriert. Außerdem werden hier auch alle Objekte bei der Engine registriert, um sie anzeigen zu lassen.
Aufbau
Die Main.kt
ist wie folgt aufgebaut:
val engine = Engine()
fun main() {
GlobalScope.launch {
engine.run {
/**
* Code um die Engine zu konfigurieren.
*/
init {
view.width = 500
view.height = 500
view.scale = 100
}
/**
* Code der VOR dem Aufbau des Views ausgeführt wird
*/
viewWillLoad {
val kreis = Kreis(50, 100, 100, Colors.RED)
val circ = Circle(fillColor = Colors.GREEN, radius = 0.5, x = 0, y = 0)
registerCanvasElement(kreis)
register(circ)
}
/**
* Code, der NACH dem Aufbau des Views ausgeführt wird
*/
viewDidLoad {
}
start()
}
}
}
init
In diesem Code-Block wird die Engine konfiguriert. Hier kann man etwa die Fenster-Breite und -Höhe oder den Titel des Fensters konfigurieren.
viewWillLoad
Der Code in diesem Block wird ausgeführt, bevor der View (die Anzeige oder Präsentation) aufgebaut wird. Hier kann man etwa Objekte wie CanvasElemente oder Bodies registrieren. Diese sollten natürlich alle registriert, sein, bevor der View aufgebaut ist.
viewDidLoad
Der Code in diesem Block wird ausgeführt, nachdem der View geladen wurde. Wir brauchen diesen Block, da manche Objekte erst dann modifiziert werden können, wenn der View sie erfolgreich registriert hat.
Falls zum Beispiel ein Ball erzeugt werden soll (als Circle-Objekt), und wir wollen diesem einen Impuls geben, um ihn zu bewegen, muss dieser Ball erstmal erstellt und fertig bei der Engine registriert werden. Wir würden ihn dann im Block viewWillLoad
erstellen und anmelden und dann im Block viewDidLoad
anschubsen.
Details & Technisches
Die Codezeile
GlobalScope.launch {}
ist etwas Besonderes. Die Engine arbeitet parallel und asynchron (!= parallel). Dies bedeutet in einer Kurzversion, dass der Code in der Engine zwar für den Programmierer regulär in einer sequenziellen Weise geschrieben werden kann, aber parallel und asynchron ausgeführt wird.
Dier Aufruf von GlobalScope.launch erledigt einen Teil dieser Aufgaben, indem es eine sogenannte Coroutine startet und die Arbeit auf Hintergrund-Threads auslagert.