20 Modellierung / UML
Video
Eigentlich haben wir Polymorphie schon in vielen anderen Beispielen verwendet, ohne etwas davon mitzubekommen. In dieser Lektion werden wir uns aber noch einmal bewusst damit auseinander setzen. Definition Polymorphie bedeutet Vielgestaltigkeit und besagt in ihrem einfachsten Fall, dass Funktionen nach außen hin gleich aussehen (die gleiche Signatur haben), aber unterschiedliches Verhalten implementieren. Dynamisches Binden Am…
Am besten lässt sich der AnimationController an einem Beispiel erklären. Daher am besten das sample-Projekt laden und sich das entsprechende Beispiel anschauen:
Um CanvasElemente zu animieren kann man zwei Varianten wählen. Subklasse erzeugen Man erzeugt eine Subklasse vom CanvasElement, welches man animieren möchte. Zum Beispiel AnimierterKreis, welche von Kreiserben soll. In dieser Subklasse kann die animate()Funktion überschrieben werden. class AnimierterKreis : Kreis(){ override suspend fun onEveryFrame() { super.animate() x++ y++ } } Animationsroutine hinzufügen Will man zu…
Um Szenen einzubauen, muss man erstmal verstehen, wie diese in der Engine gehandhabt werden. Ein implementiertes Beispielprojekt findet sich bei den Samples: DefaultScene Die Engine selbst startet immer mit einer DefaultScene, welche alle Einstellungen aus der Engine übernimmt. Modul Will man Szenen implementieren, so muss man bei der Engine ein Modul anmelden. Dieses erbt von…
Um CanvasElemente anzeigen zu lassen, muss man erstmal eines erstellen. Da es sich bei CanvasElementum eine abstrakte Klasse handelt, kann man hiervon keine eigene Instanz (kein Objekt) erzeugen. Hierfür stehen die vorgefertigen Klassen wie Kreis oder Rechteck zur Verfügung. (Hinweis: Klassen für CanvasElemente besitzen Deutsche Namen und Properties, Klassen für Objekte, die der Physik-Simulation gehorchen…
Tastatureingaben Das Singleton Keyboard bildet alle momentan gedrückten Tasten ab. Man kann sie sehr einfach abfragen. Etwa in der animate()-Funktion der CanvasElements oder der Bodies: override suspend fun animate() { super.animate() if (Keyboard.isKeyDown(Key.DOWN)) { radius– } if (Keyboard.isKeyDown(Key.UP)) { radius++ } } Zusätzlich kann das Interface KeyEventReacteable eingebunden werden. Dies funktioniert ähnlich den Mouse-Events (siehe…
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 { /** *…
Um Spiele oder Anwendungen zu gestalten, deren bespielbare Welt über ein einziges Fenster hinaus geht, kann man eine Kamera verwenden. Hierzu muss bei der Engine ein CameraController registriert werden. Dies muss zwingend erfolgen, nachdem der View aufgebaut wurde: viewDidLoad { // Wir erzeugen einen CameraController, der die Standard-Kamera der Engine verwendet. val cameraController = MeinCameraController(engine.camera)…
Sortieralgorithmen sind in der Informatiker-Ausbildung sehr beliebt. Wir werden in der zugehörigen Übung Arrays mit verschiedenen Sortieralgorithmen sortieren. Darunter BubbleSort und SelectionSort. Es gibt aber noch viel mehr solcher Algorithmen. Algorithmen allgemein Verfahren mit einer endlichen Beschreibung unter Verwendung wohldefinierter Einzelanweisungen. Beachten Sie, dass die Beschreibung endlich sein muss, nicht die Laufzeit/Ausführung. Ein wohldefinierter Einzelschritt…