Wir sind vier Leute, die ein Tower Defense-Spiel als Projekt in der ersten Klasse an einer Universität machen. Das Spiel wird wirklich einfach!
- Drei verschiedene Türme
- Drei verschiedene Monster
- Eine Karte (vielleicht noch etwas hinzufügen, wenn wir Zeit haben)
Das Spiel muss objektorientiert sein.
Die Klassenstruktur ist wie folgt
- Spiel - Zeichnen von Grafiken usw.
- Level - Jedes Level ist ein Objekt dieser Klasse. Jede Ebene hat eine endliche Anzahl von Wellenobjekten (in einer Liste)
- Welle - Enthält eine Liste von Monsterobjekten.
- Monster - Dies ist eine Superklasse. Wir machen Unterklassen für die verschiedenen Arten von Monstern
- Turm - Superklasse zu den Türmen. Für jeden Turmtyp gibt es Unterklassen.
Wir überlegen, wie wir das Problem lösen können, dass viele Objekte gleichzeitig etwas tun müssen, z. B. ein Pixel in eine Richtung bewegen.
Was wir uns ausgedacht haben, ist die Idee, einen av class Timer zu implementieren, um zu steuern, wann Objekte Dinge tun. Ich bin mir nicht sicher, ob dies der beste Weg ist. Könnte jemand einige gute Ideen geben, wie der Fall des kontinuierlichen Updates gelöst werden kann?
Grundsätzlich verwende ich eine Update-Schleife und kein ereignisbasiertes System.
Um Monster zu aktualisieren, können Sie eine Liste von Monstern durchlaufen und sie in der Aktualisierungsschleife mit beispielsweise aktualisieren.
monster.update()
Wenn ein Monster laufen muss, muss es seine Position aktualisieren. Bei der Aktualisierungsmethode berechne ich die neue Position auf der Grundlage der verstrichenen Zeit, die in einer separaten 'Timer'-Klasse gespeichert ist.
Das sollte alles 'Walking' Zeug sein;)
quelle
elapsedTime * movementPerSecond
. Oder Sie könnten eine Abklingzeit auf demif(cooldown > 0){ cooldown -= elapsedTime } else { cooldown = X, shoot(); }
Ich nehme an, es wird seinen Zweck für ein Uni-Projekt gut erfüllen, aber in einem echten Spiel hätte ich eine konkrete Monsterklasse und anstatt Unterklassen für Typen, die verschiedenen Arten von Monstern, die in Datendateien beschrieben sind. Geschwindigkeit, Gesundheitspunkte, Resistenzen gegen verschiedene Arten von Schaden und Sprites können in Dateien perfekt beschrieben werden. Dies erleichtert Ihnen das Hinzufügen neuer Monstertypen zu Ihrem Spiel und Sie müssen nicht jedes Mal kompilieren will das tun.
Sowieso über die Bewegung. Geben Sie allen "beweglichen" Objekten eine Geschwindigkeitsvariable. In jedem Frame Ihrer Spielelogik durchlaufen Sie all diese beweglichen Objekte und tun so etwas
Dies gilt für Monster, Raketen von Türmen usw.
quelle