2012-04-07 3 views
2

Ich mache ein rundenbasiertes RPG in Flash, mit AS 3 als Sprache, obwohl ich mir ziemlich sicher bin, dass du mir helfen kannst, egal welche Sprache du benutzt.Bevorzugter Weg, um Daten, Klassen oder Arrays zu verwalten?

Im Grunde war meine Idee, alle meine Waffen Daten auf einem einzigen mehrdimensionalen Array zu setzen. Wenn ich jetzt eine Waffe in mein Inventar aufnehmen möchte, benutze ich einfach inventoryArray.push(weaponArray[1]). Einfach, ich habe die Waffe einfach in mein Inventar aufgenommen.

Ich habe in Design-Muster untersucht, und es scheint, dass die meisten OOP-Designs Klassen verwenden und von einer Oberklasse erben. Component-->Weapon-->Sword-->LongSword.

Mit was soll ich gehen, alle Daten in einem Array oder mit dem Erben-Stil, mit einer Klasse mit einer einzigen Waffe?

Irgendwelche Ideen sind willkommen! Ich weiß im Grunde, wie man das Spiel selbst macht, nur dass ich keine Muster kenne, mit denen ich gehen sollte.

+0

Ist das ein Nebenprojekt für Sie?Wenn es ist, würde ich es in eine Lerneinheit verwandeln. Nimm dir einen oder vier Tage Zeit und lies dir Designmuster durch, finde die, die am besten mit AS3 funktionieren, und nimm dann die heraus, die mit deinem Spiel funktionieren. Sie werden feststellen, dass Sie zumindest ein bisschen Erbschaft brauchen, wie Laurent sagte. –

+0

Ja, es ist eine Lerneinheit. Ich bin in der Lage Spiele zu erstellen kein Problem, aber ich habe mich gerade entschieden, mich in den dunklen Abgrund von OOP zu werfen. – Secret

Antwort

2

Die meisten Objekte in Ihrem Spiel werden einige Eigenschaften gemeinsam haben - zum Beispiel haben sie vielleicht alle eine ID, einen Namen und eine Beschreibung.

Wenn Sie keine Vererbung verwenden, werden alle Klassen diese doppelten Informationen enthalten, wodurch Ihr Spiel schwer zu pflegen ist.

Wenn Sie Vererbung verwenden, können Sie alle diese gemeinsamen Eigenschaften in einer Basis (wahrscheinlich abstrakte) -Klasse haben und alle anderen Klassen davon erben. Also ja, das Designmuster, das du dir angeschaut hast, ist der richtige Weg.

Auch statt inventoryArray.push(weaponArray[1]) sollten Sie auch eine Inventory Klasse mit einer add() Methode erstellen. Dadurch können Sie Ereignisse versenden, wenn ein Objekt zum Inventar hinzugefügt wird. Das Front-End kann dann diesem Ereignis zuhören und beispielsweise die Inventargrafiken aktualisieren. Im Allgemeinen solltest du niemals generische Flash-Objekte (Array, Objekt usw.) für potentiell komplexe Objekte wie Inventar, Charaktere usw. verwenden. Mit deinen eigenen benutzerdefinierten Klassen kannst du sie einfach erweitern, wenn dein Spiel komplexer wird.

+0

Ist das tiefe Hierarchiemuster der beste Weg für solche Sachen? Was ist mit Kompositen? – Secret

+0

Diese beiden Muster schließen sich nicht gegenseitig aus. Sie werden wahrscheinlich eine Hierarchie von Klassen benötigen, und Sie könnten auch das zusammengesetzte Muster verwenden (persönlich würde ich vermeiden, um die Dinge einfach zu halten). –

+0

Okay danke. Nur noch eine kurze Frage, aber alle Dinge unter meiner Schwertklasse ändern einfach die Daten (z. B. ändert sich Gewicht und Schaden auf einen anderen Wert). Wird es eine Klasse für jede "Schwert" Waffe geben, die sich nur in Daten unterscheidet? Ich habe auf etwas wie eine Liste aller "Schwert" -Waffen gehofft, aber ich denke, das Hinzufügen einer neuen Waffe wird einfacher, da ich nur eine weitere Klasse hinzufügen muss, anstatt meine Liste zu ändern. Entschuldigung, wenn meine Frage ein wenig mehrdeutig ist. – Secret

1

Ich würde sagen, Zusammensetzung über Vererbung ist der Weg zu gehen.

Es gibt eine grundlegende Klasse von Spielobjekten, die auf Waffen, Ringe, Helme, Schilde, Tränke usw. erweitert werden kann. Diese haben alle eine Reihe von Beschränkungen, die durch Vererbung verwaltet werden können (wie die Tatsache, dass man eine Waffe einsetzen kann) Hände und Inventar nur). Aber Fähigkeiten von all diesen (wie sie den Charakter beeinflussen) sollten durch Kompositionen gemacht werden. Jedes Mal, wenn Sie der Schärpe, der Hand, dem Kopf usw. ein Objekt hinzufügen, beeinflussen sie den Charakter durch die Zusammensetzung. Wenn Sie also mit der Aktion des Charakters zu tun haben, werden Sie nicht jedes Objekt durchlaufen, sondern Sie verwenden nur die zusammengesetzte Funktion wie Angriff, die alle Funktionen des Inventars hat, die einen Teil der Charakteraktion übernehmen.


Das andere Design-Muster, das Sie ist in das Decorator-Muster aussehen kann. Ich finde, dass das Ergebnis der Komposition ziemlich ähnlich ist. "Während das Decorator-Muster uns erlaubt, Zuständigkeiten zu Objekten ohne Unterklasse hinzuzufügen, hat das zusammengesetzte Muster ein anderes Ziel: Strukturierung von Klassen, um verwandte Objekte auf die gleiche Weise zu behandeln, und mehrere Objekte können als eins behandelt werden."source

Beispiel Dekorateur Muster: http://www.as3dp.com/2011/06/well-armored-warrior-decorator-for-beginners/

Verwandte Themen