Techniken zur Reduzierung der Komplexität in der Spiele-Programmierung [geschlossen]

StackOverflow https://stackoverflow.com/questions/2145218

  •  23-09-2019
  •  | 
  •  

Frage

In meiner Freizeit I-Programm Spielen als Hobby, verschiedene Arten von Dingen und zur Zeit nichts sehr komplex. Dinge mögen 2d Shooter, Tile-Based-Spiele, Puzzle-Spiele, etc ...

Da jedoch die Entwicklung dieser Spiele geht finde ich es schwierig wird, die Komplexität der verschiedenen Subsystemen innerhalb der Spiele, Dinge wie Schnittstelle, World View / Model, Ereignisbehandlung, Staaten (Menus, Pause, usw. zu verwalten ... ), Spezialeffekte und so weiter.

Ich versuche, die Verbindungen zu einem Minimum zu halten und reduzieren Kopplung jedoch viele dieser Systeme in einer Art und Weise zu reden brauchen oder eine andere, die nicht erfordert Ihre gesamte Code-Basis in Ihrem Kopf auf einmal zu halten.

Zur Zeit versuche ich, verschiedene Subsysteme und Subsystemfunktionen auf verschiedene Objekte zu delegieren, die zusammen jedoch aggregiert habe ich nicht gefunden, eine Kommunikationsstrategie, die genug entkoppelt ist.

Welche Art von Techniken kann ich Hilfe gebrauchen mich jonglieren alle diese verschiedenen Subsystemen und behandeln die Komplexität eines ständig wachsenden System, dass der Bedarf modular genug, um schnelle Anforderungen ändern zu erleichtern?

Ich finde ich oft die gleichen Fragen:

  • Wie kommunizieren Objekte miteinander?
  • Wo sollte der Code, dass Griffe spezifische Subsysteme gehen?
  • Wie viel von meiner Code-Basis soll ich auf einmal denken?
  • Wie kann ich zwischen den Spieleinheiten reduzieren Kopplung?
War es hilfreich?

Lösung

Ach, wenn gab es eine gute Antwort auf Ihre Frage. Dann Entwicklung Spiel wäre nicht annähernd so schwierig, riskant und zeitraubend ist.

  

Ich versuche, die Verbindungen zu einem halten   Minimum und zur Verringerung Kopplung jedoch   viele dieser Systeme müssen reden in   eine oder andere Weise, die nicht der Fall ist   benötigen, um Ihre gesamte Code-Basis halten   in Ihrem Kopf auf einmal.

Sie tun, aber oft sie nicht brauchen einen Weg in ganz so direkt zu sprechen, wie die Menschen zuerst glauben. etwas ändert Zum Beispiel ist es üblich, den Spielzustand Push-Werte in die GUI, wann immer zu haben. Wenn stattdessen können Sie nur Werte speichern und die GUI-Abfrage sie (vielleicht über ein Beobachtermuster) lassen, haben Sie dann alle GUI-Referenzen aus dem Spiel Zustand entfernt. Oft genug ist es einfach zu fragen, ob ein Subsystem die Informationen ziehen können es von einer einfachen Schnittstelle benötigt, anstatt in die Daten drücken müssen.

  
      
  • Wie kommunizieren Objekte miteinander?
  •   
  • Wo sollte der Code, dass Griffe spezifische Subsysteme gehen?
  •   
  • Wie viel von meiner Code-Basis soll ich auf einmal denken?
  •   
  • Wie kann ich zwischen den Spieleinheiten reduzieren Kopplung?
  •   

Nichts davon ist wirklich spezifisch für Spiele, aber es ist ein Problem, das oft mit Spielen entsteht, weil es so viele unterschiedliche Subsysteme sind, dass wir noch nicht Standard Ansätze entwickelt haben. Wenn Sie Web-Entwicklung nehmen, dann gibt es eigentlich nur eine kleine Anzahl von etablierten Paradigmen: die „eine Schablone / Code-Datei per URI“ von so etwas wie PHP, oder vielleicht das „Model / View-Template / Controller“ -Ansatz von RoR, Django, plus ein paar andere. Aber für Spiele, alle ihre eigenen rollt.

Aber eins ist klar: Sie sind nicht das Problem, indem er lösen kann ‚Wie Objekte kommunizieren‘. Es gibt viele verschiedene Arten von Objekten und sie erfordern unterschiedliche Ansätze. Versuchen Sie nicht, und eine globale Lösung findet jeden Teil des Spiels zu passen - Eingang, Netzwerk, Audio, Physik, künstliche Intelligenz, Rendering, Serialisierung - es ist nicht passieren wird. Wenn Sie versuchen, eine Anwendung zu schreiben, indem sie versuchen, mit einem perfekten IObject Schnittstelle zu entwickeln, die jedem Zweck anpassen werden dann werden Sie scheitern. Lösen Sie individuelle Probleme und dann für die Gemeinsamkeit suchen, Refactoring, wie Sie gehen. Ihr Code muss zuerst verwendbar sein, bevor es kann sogar sein, wieder verwendbaren berücksichtigt werden.

Game-Subsysteme Leben zu welcher Ebene auch immer sie müssen, nicht höher. Normalerweise habe ich ein Top-Level-App, die die Grafik, Sound, Input besitzt, und Game-Objekte (ua). The Game Objekt besitzt die Karte oder Welt, die Spieler, die Nicht-Spieler, die Dinge, die die Objekte definieren, etc.

Distinct Spiel Zustände können ein bisschen schwierig sein, aber sie sind eigentlich nicht so wichtig, wie die Leute annehmen, dass sie sind. Pause kann als eine Boolesche codiert werden, das, wenn es gesetzt, einfach deaktiviert AI / Physik Updates. Menüs können als einfache GUI-Overlays codiert werden. So Ihre ‚Menü Zustand‘ nur einen Fall wird das Spiel pausiert und das Menü zeigt, und Die Fortsetzung des Spiels, wenn das Menü geschlossen ist -. Keine explizite Zustandsverwaltung erforderlich

Die Reduzierung zwischen Spieleinheiten Kopplung ist ziemlich einfach, wieder, solange Sie nicht eine amorphe Idee haben, was für ein Spiel Unternehmen ist das führt zu allem benötigen, um alles zu potenziell zu sprechen. Die Charaktere im Spiel der Regel Live innerhalb einer Karte oder eine Welt, die im Wesentlichen eine räumliche Datenbank (unter anderem) und kann die Welt bitten, es zu in der Nähe Charakteren und Objekten zu erzählen, ohne jemals direkte Verweise auf sie halten zu müssen.

Insgesamt aber Sie nur gute Software-Entwicklung Regeln für Ihren Code verwenden. Die Hauptsache ist Schnittstellen klein, einfach zu halten, und konzentrierte sich auf ein und nur ein Aspekt. Die lose Kopplung und die Fähigkeit, sich auf kleinere Bereiche des Codes zu konzentrieren fließt natürlich aus, dass.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top