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

23.02.2013, 17:45

Wie verwendet man das Model-View-Controller Pattern richtig?

Hallo liebe Community,
Ich möchte gerne ein Spiel programmieren. Um es gleich zu Anfang richtig zu strukturieren, habe ich mich entschlossen, das Model-View-Controller-Pattern anzuwenden. Allerdings habe ich da so einige Probleme, wie ich das nun mache...

Das Pattern teilt das Programm ja in 3 Teile: Model (das wären dann die Spielobjekte), View (Ansicht der Objekte, Camera) und Controller, der sich View anguckt und prüft, ob Spieler eingaben macht und die Modelle entsprechend updatet.
Soweit richtig? Oder eher nicht?

So... Jetzt habe ich meinetwegen eine Map, 50 Bäume, 20 Einheiten, die sich bewegen und einige Anzeigen (Lebensbalken, Freund/Feind-Kennung, etc.) und den Spieler.
Also kann ich ein Array o.ä. für die 50 Bäume anlegen, die eine Ableitung von der Model-Klasse sind. Das Array ist in der Controller-Klasse? Und dann kann ich sagen: bäume[5].FalleUm(); -> Controller ändert Model

Jetzt zeichne ich die ganzen Dinger in der Controller-Klasse: View.Draw(Model meinModel); -> View holt sich die Daten von Model
Problem: jedes Model gibt ja eigentlich andere Daten aus, z.B. für einen Baum muss keinen Lebensbalken gezeichnet werden... Wie strukturiere ich das? Für jede Unterscheidung eine andere Methode, sie zu zeichnen? Also Lebensbalken erst in View.DrawGUI()?

Wenn ich jetzt als Anwender interagiere, und mit der Maus irgendwo hinklicke, wo geht das dann hin? Ich meine das bekommt man ja im 3d-Raum mit Picking hin, aber dazu müssen die Objekte dann mitkriegen, dass sie "angeklickt" wurden... der Controller braucht also die Daten von View um das Model zu bestimmen? Wie mache ich das? o.O

Macht man das überhaupt so? Ich habe MVC empfohlen bekommen, aber wie ich das genau anwenden soll ist mir schleierhaft...
Könnt ihr mir helfen?

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »a_b_c« (23.02.2013, 17:52)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

23.02.2013, 17:55

Mein Tipp: Vergiss MVC für Spiele und bau es so, wie Du es für notwendig hältst.
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]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

23.02.2013, 17:59

Ich finde klassisches MVC nicht sonderlich sinnvoll für Spiele. Du kannst damit aber natürlich rumspielen und dir deine eigenen Gedanken dazu machen. Beim Model ist es eigentlich gar nicht so schwer. Du hast nicht einfach eine Klasse Model, die alles kennt. Du kannst ein Model anlegen für ein Mapobjekt, eins für einen Spieler und so weiter. Du hast also verschiedene Modelklassen und die wissen alle nur so viel wie sie wirklich wissen müssen. Das Prinzip ist hier das selbe wie bei anderen Klassen auch. Du schreibst deine Klassen und kannst dann gucken wie viel du verallgemeinern kannst um Informationen zu Basisklassen zusammen zu fügen. Leg also einfach deine einzelnen Modelklassen an und guck dann in einem weiteren Schritt was du zusammen fassen kannst. Fass dann nur das zusammen, was wirklich jedes Model braucht.
Dazu ist es denke ich allgemein sinnvoll mal ein Tutorial anzugucken. Zu Spielen wird es da vermutlich nicht viel geben, aber du kannst das ganze ja auch erst mal an Hand einer normalen Anwendung verstehen. Such dir einfach mal ein Tutorial und arbeite es durch. Dann sollte schon mehr Verständnis da sein.
„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.“

4

23.02.2013, 19:54

Mh ok. Ich hatte mir nur gedacht, von den Zielen her ist MVC ja eigentlich für die meisten Spiele geeignet. Da hab ich wohl zuviel gedacht :D
Sonst baue ich immer so, wie mir gerade lustig ist (bzw. ich wende einfach das überaus oft an, was ich neu gelernt habe). Das führt normalerweise zu... unvorhersehbaren Features in meinen Programmen.
Deshalb habe ich mir gedacht, ich lege möglichst im Voraus fest, wie ich mein Programm strukturell gliedere.

Habt ihr vielleicht Tipps, wie man eine möglichst gute Gliederung in sein Code kriegt? Oder wenn ihr Spiele programmiert, wie startet ihr damit?

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

5

23.02.2013, 20:22

Habt ihr vielleicht Tipps, wie man eine möglichst gute Gliederung in sein Code kriegt? Oder wenn ihr Spiele programmiert, wie startet ihr damit?

Scheue dich nicht vor Refactoring! Wenn du merkst, dass du etwas doch nicht ganz so hübsch gebaut haben solltest, kannst du es immernoch anpassen, es wird dich zwar einige Stunden intensiver Arbeit kosten, allerdings könnte es sich lohnen, mit einer besseren Architektur weiter zu arbeiten.
Ich weiß nicht, wie viel Erfahrung du in der Richtung schon gesammelt hast, aber es ist ratsam, das Aktualisieren der Spielszene (u. a. auch das Auswerten der Eingaben) sauber von der Darstellung der Spielszene zu trennen. Ansonsten könnte ich höchstens das wiederholen, was bereits geschrieben wurde.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

6

24.02.2013, 11:10

Okay. Dann werde ich das mal angehen.

Danke für eure Hilfe.

Werbeanzeige