So erstellen Sie effektiv Aufzählungsmuster

8

Ich erstelle gerade einen Top-Down-Shooter wie Touhou. Der wichtigste Faktor des Spiels ist, dass es viele verschiedene Muster und Möglichkeiten gibt, wie Kugeln erzeugt und auf den Spieler geschossen werden. Siehe dieses Video: http://www.youtube.com/watch?v=4Nb5Ohbt1Sg#start=0 : 60; Ende = 9: 53 ;

Im Moment verwende ich eine Klasse "Pattern", die eine Reihe von Schritten zum Bewegen und Schießen enthält. Ich halte diese Methode jedoch für ziemlich mühsam, da ich für jeden Angriff ein neues Muster und möglicherweise neue Bullet-Klassen erstellen muss, die ein bestimmtes Verhalten implementieren.

Diese Frage erhielt einen Kommentar, der vorschlug, dass ich mich mit BulletML befassen sollte, um Aufzählungszeichen mit einem bestimmten Muster einfach zu erstellen und zu speichern. Es sieht anständig aus, aber ich habe mich gefragt, welche anderen Lösungen Sie haben, die ich in Betracht ziehen sollte.

Aktualisieren

Mein aktuelles Design ist wie folgt:

UML-Diagramm

Ein Beispiel für ein implementiertes Muster:

Mein GigasPattern führt zuerst einen Teleport aus, der Alice zu einem bestimmten Punkt (X, Y) auf dem Bildschirm bewegt. Nachdem dies abgeschlossen ist, verwendet das Muster den Mover, um das Sprite zu bewegen (während das Teleportieren separate Effekte und Animationen hat). Diese sind eigentlich nicht von Belang, da sie recht einfach sind.

Der Schütze erstellt auch verschiedene Angriffe, die wiederum Klassen sind, mit denen der Schütze verschiedene Muster von Kugeln erstellen kann, ähnlich wie in der Frage, die ich gestellt habe. Sobald der Mover sein Ziel erreicht hat, halten er und der Schütze an und kehren in einen inaktiven Zustand zurück. Das Muster ist fertig, wird von der KI entfernt und ein neues ausgewählt.

IAE
quelle

Antworten:

4

Es wird mühsam sein, egal was passiert, ein solches Level zu erstellen scheint eine leichte Aufgabe zu sein, und es mag nicht allzu schwierig sein, aber es wird immer viel Zeit in Anspruch nehmen. (Eine sehr grobe Schätzung: 1000-fache Spielzeit für etwas so Cooles wie dieses Video.)

Wenn Sie eine Skriptsprache verwenden, müssen Sie immer noch genau denselben Code schreiben, nur in einer anderen Sprache. Der Vorteil besteht darin, dass Sie Skriptebenen erstellen können, ohne den kompilierten Code zu beeinträchtigen. Wenn Sie in einem großen Team arbeiten, möchten Sie das auf jeden Fall, aber als alleiniger Entwickler macht es normalerweise keinen großen Unterschied.

BulletML ist an sich keine Antwort. Sie benötigen eine funktionierende Implementierung in Ihrer Sprache, die mit dem Rest Ihres Spiels kompatibel sein muss. Und trotzdem gibt es eine große Aufgabe, all diese XML-Dateien zu schreiben.

Ich neige dazu zu sagen, dass Sie sich daran halten sollten, die gewünschten Muster in Klassen zu programmieren, aber vielleicht könnten Sie einige Beispiele Ihrer aktuellen Struktur enthüllen, es könnten Verbesserungen vorgenommen werden.

Bearbeiten:
Möglicherweise gibt es eine Erkenntnis, die die Dinge ein wenig vereinfachen und Ihnen eine etwas bessere Toolbox bieten könnte. Sie könnten eine KI als Muster beschreiben. Idealerweise sollte es nur einen Entitätstyp geben, aber jede solche Entität kann sich dafür entscheiden, eine andere Entität desselben Typs aufzurufen, um die Aufgabe auszuführen. Dies befreit Sie von jeglichen Grenzen, wie tief Sie die Weitergabe von Verantwortung verschachteln können, und gibt Ihnen eine Klasse weniger, über die Sie nachdenken können.

Zumindest entnehme ich das dem Diagramm. Während Sie zu Recht die Menge an Code begrenzen sollten, die Sie in eine Frage aufnehmen, gibt es nie einen vollständigen Ersatz für das Anzeigen eines tatsächlichen Codes.

aaaaaaaaaaaa
quelle
Klar, danke für die Hilfe. Ich habe ein vereinfachtes UML-Diagramm meines aktuellen Entwurfs sowie eine Beispielanwendung des Entwurfs in Aktion beigefügt. Ich hoffe, es hilft!
IAE
2

Vielleicht könnten Sie eine eigene, kleine Skriptsprache für Ihr Spiel implementieren. Dann können Sie das Verhalten von Aufzählungszeichen skripten, indem Sie einfach neue Skripte hinzufügen. Der Vorteil einer eigenen Skriptsprache ist, dass Sie diese in anderen Teilen Ihres Spiels verwenden können. Oder Sie könnten versuchen, Lua zu verwenden (ich weiß nicht, welche Sprache / welches Framework Sie verwenden). Aber meiner Meinung nach wäre Lua ein Overkill, wenn Sie nur Bewegungsmuster haben möchten.

Zwischen: Ich habe das schon für einen Weltraumschützen gemacht, aber für das feindliche Verhalten. Es hat gut funktioniert, also kann man das wirklich einfach ausprobieren.

M0rgenstern
quelle
Ich verwende AS und es eignet sich nicht so gut für die Verwendung lokaler Ressourcen. Die Verwendung einer Skriptsprache oder von XML kann für mich jedoch von Wert sein. Vielen Dank für den Vorschlag.
IAE
2

Ich war vor einiger Zeit in genau der gleichen Situation und begann, meine eigene Architektur für Aufzählungsmuster zu implementieren. Ich habe jedoch aufgegeben, weil ich auf eine Implementierung von BulletML für C # / XNA gestoßen bin : BulletML C #

Ich musste ein paar Änderungen vornehmen, aber jetzt ist es wirklich sehr einfach, Muster zu erstellen, die spektakulär aussehen. Es gibt eine große Demo hier das zeigt, wie ein paar Zeilen von XML, ehrfürchtige Muster erstellen können.

Wenn Sie an C # arbeiten, empfehle ich dringend, das Rad nicht neu zu erfinden. Besonders wenn Sie sehr komplexe Muster haben möchten. Es kann einige Zeit dauern, bis Sie sich mit BulletML beschäftigt haben, aber meiner Meinung nach ist es Ihre Zeit wert.

Wenn Sie sich jedoch gegen BulletML entscheiden, sollten Sie sich zumindest den C # -Code ansehen und sich ein Bild von seiner Architektur machen. Es könnte Ihnen einige Ideen geben.

pek
quelle
Vielen Dank! Ich habe gerade angefangen, mich für dieses Projekt von ActionScript zu entfernen und schreibe es jetzt in C # / XNA. Ich werde mir auf jeden Fall den Code ansehen, danke.
IAE