Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

08.04.2011, 14:08

Facade pattern in spielen?

hallo,

hätte da mal ne designmäßige frage zur spieleprogrammierung.

bei softwareentwwicklung, soweit ich sie bis jetzt kenne, verwendet man ja oft fassaden um die funktionalität des "kerns" nach außen hin durch ne "einfache" schnittstelle anzubieten.

jetzt wollte ich fragen, ob das auch in spielen sinn macht bzw. wie man es umsetzen sollte?


ich habe momentan ein konkretes beispiel in nem rpg:

man hat einheiten, gegenstände, fähigkeiten und spieler die sozusagen die "kernklassen" des spiels darstellen.

jetzt hatte ich an eine art "gamecorefacade" gedacht, die dann alle funktionalitäten zur verfügung stellt wie:
- erstelle einheiten
- entferne einheit
- erstelle spieler
- entferne spieler
- erstelle gegenstand für einheit
usw.

die facade wirft dann alles dahinter an, also z.b. bei den erstellungsmethoden die factories, bei item einheit geben überprüft es, ob es die einheit gibt und ob sie noch einen slot hat, wenn ja erstellt sie item und gibt es der einheit usw..

dadurch können die kernklassen recht einfach gestaltet werden und sind auch "schnell", da die ganze spielmechanik und logik dann eben in dieser fassadenschnittstelle drinsteckt.



meine frage ist jetzt eben, macht das sinn? gibt es andere/bessere ansätze? sollte man zu jeder klasse ne extra fassade machen (unitfacade,itemfacade,...)?


lg
simon

2

08.04.2011, 14:44

Bist du dir sicher, dass du nicht eher das Mediator-Pattern meinst? Die Subsysteme beim Facade-Pattern sollen ja eigentlich nichts von der Facade wissen. Die Facade würde IMO eher Sinn bei einer Spielklasse o.Ä. machen. Also zum Beispiel gibt es dann eine Facade Game, die start, pause, exit oder so anbietet.

3

08.04.2011, 16:54

mediator pattern sagt mir jetzt nichts,aber schaue gleich nach.

meine das hier:
http://en.wikipedia.org/wiki/Facade_pattern

vom beispiel her wäre bei mir der computer eben die gamecorefacade und cpu/ram/bla wäre unit,player,item,usw.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

4

08.04.2011, 17:17

Die Frage lässt sich nicht so beantworten - da es sich um eine Entwurfsentscheidung deinerseits handelt. Fassaden machen durchaus Sinn, nur sollte man sie nicht überall einsetzen. Ich benutze Fassaden für das Skripting im Game. Es gibt dann eine Skript-Fassade , die verschiedene Bundels im Game abdeckt.

z.B.
Erstelle Objekt
Setze Rotation
Gebe Text aus

Diese Skript-Fassade nutze ich dann um genau diese Funktionen in Lua bereitzustellen. Patterns sollten übrigens nicht nach dem Muster "Ich will jetzt Patterns drin haben" angewendet werden - sie kommen einfach ohne das man es merkt, wenn man ein sauberes Design hat oder erstellt.

Ein Mediator definiert wie verschiedene Partner / Objekte interagieren und ermöglicht so eine lose Koppelung zwischen Subsystemen (lt. E- Gamma). Du lagst mit deiner Beschreibung im ersten Thread schon richtig.

5

08.04.2011, 20:16

Ich bin davon ausgegangen, dass du z.B. auch innerhalb des Spielerobjekts o.Ä. mal auf die Funktionen der "gamecorefacade" zugreifen möchtest. Sobald man das macht kann man eigentlich nicht mehr wirklich von einem Facade Pattern sprechen - es geht darum für eine Menge an Subsystemen von außen eine vereinfachte Zugriffs-/Steruerungsmöglichkeit zu geben. Wenn du aber genau das vorhast also sozusagen aus vielen verschiedenen Knöpfen und Reglern einige wenige Knöpfe zu machen, die irgendein anderes System von "außen" leicht bedienen kann, dann ist das Facade-Pattern genau das was du meinst und ich habe dich falsch verstanden.

6

09.04.2011, 20:06

habe nochmal in nem rpg prog buch von mir nachgeschaut, wie da das gelöst wird, was ich will. für diejenigen,die es interessiert:

in diesem buch wird für jede "wichtige" coreklasse ein controller gebaut, der dann die ganzen objekte + "logiken" dieser klasse verwaltet.

z.b. hat ein unitcontroller folgende funktionen:
-add: um eine einheit hinzuzufügen. z.b. mittels filepath auf eine datei und der controller übernimmt die logik um die einheit mit richtigen werten zu erstellen
-remove: um eine einheit zu entfernen
-get: um eine gewisse einheit auszulesen, sofern vorhanden
-damage: um eine einheit eine andere einheit verletzen zu können
-cast: um eine einheit zaubern zu lassen
-useItem: um einer einheit das benutzen von gegenständen zu gestatten
...

der controller verwaltet dabei anscheinend eine liste von allen auf diese weise erstellten einheiten und hat somit schon die kontrolle über diese ganzen objekte.


ich denke das war das,was ich gesucht habe. dazu noch ein schönes eventsystem, dann hab ich glaube ich die abstraktion zum "kern" soweit gut im griff.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

7

09.04.2011, 22:09

ist das nicht ne stink normale interfaceklasse?^^
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

11.04.2011, 11:15

Was heisst normale Interfaceklasse;) Ne Fassade ist ja auch nichts besonderes. Wenn du auf solche Ideen kommst dann versuch es ruhig einfach mal aus. Vielleicht zur not in einem kleinen Beispielprojekt zum testen. Ein Entwurfsmuster zu 100% richtig zu implementieren ist in den meisten Fällen eh so gut wie unmöglich bzw unangebracht. Du solltest deinen Code bzw dein Design ja nicht an irgendwelche Muster anpassen, sondern die Muster an dein Design;) Ich würde vielleicht überlegen einen "MainController" oder so zu schreiben, der dann alle weiteren Controller aufrufen könnte. Das wäre irgendwo schon eine Fassade. Fassade und Mediator sind übrigens verwandte Patterns. Wenn man sich mal die Eigenschaften der beiden anguckt, fallen einem viele Parallelen auf.
Eine Fassade bzw ein Mediator oder irgendeine andere Vereinfachung von einer Anhäufung von Klassen macht normalerweise Sinn, sobald du glaubst dir damit die Arbeit zu vereinfachen. Man kann mit deinen "paar" Controllerklassen sicherlich auch super ohne Fassade arbeiten. Wenn du jedoch denkst du vereinfachst dir die Arbeit wenn du eine Schicht oben aufsetzt, dann sollte das wohl ausreichen es umzusetzen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

9

11.04.2011, 12:01

Ich denke mal, Du hast dich verschrieben. Natürlich solltest Du dein Design an die vorgegebenen Muster anpassen. Das ist der Grund für diese Muster.
Die Muster an dein Design anpassen ist nicht besonders clever. Dann kannst Du die Pattern auch weglassen.
Nimm mal das Singleton Pattern als Beispiel. Hier ist klar vorgegeben, wie man eine Singleton Klasse umsetzen sollte. Du mußt es nicht so machen.
Aber viele Leute mit viel Sachverstand haben herausgefunden, dass wenn man es auf eine bestimmte Art macht, dass es so am besten ist.
Natürlich kann man es auch gerne anders machen. Aber warum sich gegen die Erfahrung anerkannter Experten stellen?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

11.04.2011, 12:08

Äh, nein, buggypixels. Vieles davon stimmt so nicht.
Patterns existieren nicht, damit man sie verwendet und sein eigenes Design daran anpasst. Sie existieren, weil sie sich aus der Verwendung herauskristallisiert haben.
Ein Singleton gibt ebenfalls nicht "klar vor", wie man es umzusetzen hat, lediglich seine Eigenschaft wird beschrieben.
Gutes Software-Design wird Patterns verwenden OHNE sich vorgenommen zu haben diese zu verwenden, sondern aus dem Fakt heraus, dass sie bei gutem Design automatisch "entstehen".
Ich als Entwickler nehme mir doch nicht beim Entwurf meiner Software vor: "Hier brauche ich das Pattern und dort jenes". Sondern ich habe ein Problem, welches ich umsetze und mir ein Design dazu überlege. Wenn die Umsetzung gut war, dann finden sich darin automatisch gewisse Pattern wieder.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige