Frage

Zusammenfassung:

  

Kann ich eine eine „dicke   Client“Spiel in C ohne neu zu erfinden   Räder , oder sollte ich beißen nur die   Kugel und eine Bibliothek oder SDK verwenden?   Ich bin einen moderaten C-Programmierer und bin nicht   Angst, mit Zeigern zu arbeiten, Daten   Strukturen, Speicherplätze, usw., wenn   es gibt mir die Kontrolle Ich muss   machen einen großen „Thick-Client“ -Spiel.   Aber ich denke an eschewing   Hochsprachen und Frameworks für   Aus Gründen der Macht und Kontrolle, nicht   einfache Bedienung.

Ich bin interessant in irgendwann mit einem 2D-Kampf / Jump 'n Run-Spiel als Nebenprojekt bastelt. Ich bin in erster Linie ein Linux-Server-Side-Programmierer mit Erfahrung in Python, Ruby und PHP. Ich weiß, dass es hervorragende Rahmenbedingungen in einigen dieser Sprachen, wie PyGame . Ich bin mir auch bewusst für den Erfolg Menschen mit Sachen gehabt haben wie Air und .NET ... aber ich habe einige Bedenken:

  • Performance : Skriptsprachen sind notorisch langsam. Wenn ich ein Echtzeit-Spiel zu machen, möchte ich es so schnittig wie möglich sein.
  • Huge Binärdateien : Verwenden von Frameworks wie Sprachen .NET oder scripting wie oft Ruby-in großen CLRs oder Bibliotheken führen, die Sie sonst nicht brauchen würden. Das Spiel Ich werde machen wollen klein und einfach - ich will nicht seine CLR größer sein als das Spiel selbst
  • Zusätzliches Material :. Ehrlich gesagt, Ich mag einfach nicht die Idee von einiger großen Spiel Bibliothek Gepäck vererben, wenn ich meinen Kopf um meinen eigenen Code wickeln kann besser

Ich frage diese Frage, weil ich ich bin sehr anfällig weiß nicht hier Syndrom erfunden. Ich will es immer programmieren mich, und ich bin sicher, dass es viel Zeit vergeudet. Allerdings funktioniert dies erstaunlich oft für mich aus - zum Beispiel, anstelle der Verwendung von Rails (eine sehr große Web Projektrahmen mit einer ORM und GUI-Toolkit eingebrannt), I verwendet eine Anordnung von kleineren Werkzeugen wie Rubin Rack und Fortsetzung , die zusammen schön passen.

So wende ich mich an Sie, SO Experten. Bin ich naiv? Hier ist, wie ich es sehe:

  • Verwenden Sie C
    • Cons
      • wird mich wahrscheinlich hassen Programmierung
      • Hohe Risiko neu zu erfinden Räder
      • Hohe Risiko für es so lange dauern würde, dass ich das Interesse verlieren
    • Pros
      • Versucht & wahr - die meisten A-Liste-Spiele sind in C durchgeführt
      • (das ist immer noch wahr heute?)
      • Hohe Kontrolle über die Speicherverwaltung, Geschwindigkeit, Asset Management, etc., die ich mich selbst vertrauen zu lernen, zu behandeln
      • Keine cruft
  • Verwenden Rahmen oder SDK
    • Cons
      • Risiko von übergroßen lieferbar
      • Abhängig von Original-Bibliothek Autoren für alle Facetten der Spieleentwicklung - was, wenn es nicht eine Funktion ist, ich will? Ich werde es selbst programmieren müssen, was nicht schlecht ist, aber besiegt teilweise dazu, einen Rahmen auf hoher Ebene in erster Linie mit
      • Hohe Risiko von Performance-Problemen
    • Pros
      • viele schnelle Entwicklungszeit
      • könnte einfacher sein, zu halten
      • Keine Zeit Paradigmen verschwendet neu zu erfinden

Was kann ich sonst noch zu dieser Liste hinzufügen? Ist es eine reine Ermessenssache, oder kann jemand die Sache für mich versiegeln? Buchen Vorschläge willkommen.

War es hilfreich?

Lösung

Mein heutiges Denken ist:

  • Wenn Sie programmieren lernen wollen, starten Sie das Spiel-Engine von den Basiselementen machen nach oben (auch grundlegende Datenstrukturen Implementierung - Listen, Karten, etc.). Ich habe dies einmal getan, und während es eine Lernerfahrung war, habe ich viele Fehler gemacht, und ich würde dies ein zweites Mal nicht tun. Doch für das Lernen, wie auch zu programmieren, wie etwas zu machen kühl und Ergebnisse zu sehen Ich würde diese Rate hoch.

  • Wenn Sie ein richtiges Spiel machen wollen, nutzt alle Bibliotheken, die Sie und Design sich alles Spiels Infrastruktur wollen. Dies ist, was ich jetzt tue, und ich all die schönen Dinge wie STL, ATL / WTL, Boost, SQLite, DirectX usw. Bisher habe ich viel über die Mitte / Spiellogik Aspekt gelernt der Code und Design.

  • Wenn Sie nur ein Spiel mit Künstlern und anderen Menschen machen zusammen ein fertiges Produkt zu erstellen, verwenden Sie einen der vorhandenen Motoren (OGRE, Irrlicht, Nebula, Drehmoment, etc.) und nur in Ihrem Spiel Logik hinzufügen und Kunst.

Ein letzt bisschen Weisheit, die ich gelernt habe, ist, dass sich keine Sorgen über die Not Invented Here-Syndrom. Als ich gekommen bin, dass andere Bibliotheken (wie STL, Boost, DirectX, etc.) zu erkennen, hat eine Größenordnung (oder drei) mehr Mannstunden Entwicklungszeit in ihnen, weit mehr, als ich je auf diesem Abschnitt verbringen könnte des Spiels / Motor. Daher ist der einzige Grund, warum diese Dinge selbst zu implementieren ist, wenn man über sie lernen wollen.

Andere Tipps

Ich glaube, Sie unter einem Irrtum arbeiten.

Es gibt mehrere Frameworks gibt, die speziell für Spiele-Programmierung --- geschrieben von Menschen mit viel Erfahrung mit der Komplikation der Game-Design, mit ziemlicher Sicherheit mehr tha Sie tun.

Mit anderen Worten, Sie haben ein „Hohes Risiko von Performance-Problemen“, wenn Sie nicht einen Rahmen anwenden.

Ich würde empfehlen Sie versuchen, Pyglet .

  • Es hat eine gute Leistung, wie es opengl nutzt
  • Es ist eine kompakte All-in-one-Bibliothek
  • Es hat keine zusätzliche Abhängigkeiten neben Python

einige Tests durchführen, finden Sie, wenn Sie es schnell genug für Sie machen können. Nur wenn Sie sich selbst beweisen, dass es nicht auf ein niedrigeres Niveau bewegen wird. Obwohl, ich bin ziemlich zuversichtlich, dass Python + Pyglet damit umgehen kann ... im schlimmsten Fall werden Sie ein paar C-Erweiterungen schreiben.

Heute, ich glaube, Sie an einem Punkt sind, wo Sie sicher das Leistungsproblem ignorieren können, wenn Sie speziell sind versuchen, etwas zu tun, die die Grenzen stößt. Wenn Ihr Spiel ist, sagen wir, nicht komplizierter als Quake II, dann sollten Sie Tools und Bibliotheken auswählen, die Sie am meisten auf Ihre Zeit tun lassen.

Warum habe ich Quake II? Da läuft in einer Version für .NET kompiliert, läuft es mit einem Software-Renderer an einem mehr als akzeptabler Bildfrequenz auf einer aktuellen Maschine. (Wenn Sie möchten - vergleichen MAME, die mehrere Prozessoren und Grafikhardware zu akzeptablen Preisen emuliert)

Sie müssen sich fragen, ob Sie in diesem sind, einen Motor zu bauen oder ein Spiel zu bauen. Wenn Ihr Ziel, ein Spiel zu erstellen, sollten Sie auf jeden Fall bei einem etablierten Gaming-Engine aussehen. Für 2D-Spiele-Entwicklung, Blick auf Torque Game Builder . Es ist eine sehr leistungsstarke 2D-Gaming-Engine / SDK, das Sie in die Produktion von Tag gelegt wird 1. Sie eine Vielzahl von Werkzeugen haben, die mit ihm, Content-Packs zu integrieren, und Sie den vollständigen Quellcode erhalten, wenn Sie Änderungen vornehmen möchten und / oder lernen wie es funktioniert. Es ist auch Mac OSX kompatibel und verfügt über Linux-Versionen in der Gemeinde.

Wenn Sie sich für etwas auf der Konsolenseite suchen, haben sie das auch.

Ich bin überrascht, niemand hat erwähnt XNA . Es ist ein Rahmen um DirectX gebaut dafür verwaltete DirectX-Programmierung, während viele der Flaum und Ausführlichkeit der unteren Ebene DirectX-Programmierung zu entfernen.

Performance-weise, für die meist 2D-und 3D-Spiel Aufgaben, vor allem so etwas wie ein Kampfspiel bauen, diese Plattform sehr gut funktioniert. Es ist nicht wie schnell, als ob Sie Bare-Metal-DirectX-Programmierung wurden zu tun, aber es wird Sie ganz in der Nähe und in einer verwalteten Umgebung, nicht weniger.

Ein weiteres cooles Nutzen von XNA ist, dass die meisten der Code kann auf einer Xbox 360 ausgeführt werden und kann sogar über die Netzwerkverbindung getestet werden war das Spiel läuft auf der Xbox. XNA-Spiele werden jetzt von der Xbox Live-Team für den Vertrieb und Verkauf auf Xbox Live Arcade und genehmigt werden darf. Also, wenn Sie das Projekt in einen kommerziellen Staat zu nehmen suchen, könnten Sie am verfügbaren Mittel zur Verteilung zur Verfügung haben.

Wie alle MS-Entwicklungs-Tools, die Dokumentation und Support ist erstklassig, und es gibt eine große Entwickler-Community mit vielen Tutorials, bestehende Projekte, etc.

Möchten Sie in der Lage sein, Ihr Spiel auf einer Konsole zu spielen? Haben Sie es als eine Lernerfahrung zu tun? Wollen Sie das Endprodukt Cross-Plattform sein? Welche Bibliotheken haben Sie in so weit geschaut?

Für ein 2D-Spiel, das ich denke, die Leistung nicht ein Problem sein, ich mit etwas empfehle, dass Sie die Ergebnisse auf dem Bildschirm in kürzester Zeit zu bekommen. Wenn Sie eine Menge Erfahrung zu tun Python haben dann PyGame ist eine gute Wahl.

Wenn Sie dabei einige 3D-Spiele in die Zukunft planen, würde ich empfehlen, einen Blick auf Ogre unter ( http: // www.ogre3d.org ). Es ist eine Cross-Plattform-3D-Grafik-Engine, die den Grafik-APIs abstrahiert. Doch für ein 2D-Projekt ist es wahrscheinlich übertrieben.

Die häufigste Implementierungssprache für A-Liste Spiele heute ist C ++, und eine Menge Spiele einbetten eine Skriptsprache (wie Python oder Lua) für Spiel-Ereignis Scripting.

Die Werkzeuge, die Sie verwenden würden, um ein Spiel zu schreiben haben viel mit Ihren Gründen, es zu tun für das Schreiben, und mit Ihren Anforderungen. Dies ist nicht anders als jedes anderes Programmierprojekt, wirklich. Wenn es sich um ein Nebenprojekt ist, und Sie tun es auf eigene Faust, dann können nur Sie beurteilen, wie viel Zeit Sie auf diese verbringen und was Ihre Leistungsanforderungen sind.

Im Allgemeinen heutigen PCs sind schnell genug, um 2D-Plattformer geschrieben in Skriptsprachen zu laufen. eine Skriptsprache ermöglicht es Ihnen, die Dinge schneller Prototyp, und Sie werden mehr Zeit, um das Gameplay zu optimieren haben. nicht anders als bei jedem anderen Projekt Auch dies ist.

Wenn Sie mit C ++ gehen, und Ihre Gründe haben noch aufwändigere zu sein als „weil ich es will:“ Ich würde vorschlagen, dass Sie bei SDL sucht Rendering und Audio-Unterstützung. Es macht die Dinge ein wenig einfacher.

Wenn Sie die zugrunde liegenden Technologien lernen wollen (DirectX, oder Sie wollen optimiert blitters aus irgendeinem perversen Grund schreiben), dann mit allen Mitteln, verwenden C ++.

Nachdem alles gesagt, dass, würde ich Sie gegen vorzeitige Optimierung warnen. Für ein 2D-Spiel, werden Sie wahrscheinlich besser dran mit Python und PyGame geht zuerst. Ich wäre überrascht, wenn diese Werkzeuge unzureichend auf modernen PCs erweisen werden.

Wie, was die Leute gesagt haben, über C / C ++ / Python, ich bin ein Spieleentwickler und meine Firma ermutigt C. Nicht b / c C ++ ist schlecht, aber da schlecht geschrieben C ++ ist Gift für die Entwicklung von Spielen aufgrund seiner Schwierigkeit zu lesen / debug im Vergleich zu C (C ++ gibt Vorteile verwendet, wenn sie richtig, aber wir ein Junior-Typ einige Fehler mit ihm machen und die Zeit Waschbecken ist sehr groß)

In Bezug auf die eigentliche Frage: Wenn Ihr Ziel ist es, nur etwas zum Laufen zu bringen, eine Bibliothek verwenden.

Ansonsten Code es sich für einen sehr wichtigen Grund: Praxis
Praxis in Datenstrukturen zu manipulieren. Es gibt Zeiten, die Sie benötigen, um Ihre eigenen Daten zu verwalten. Praxis in Dienstprogramm Code debuggen.

Oft Libs tun genau das, was Sie wollen, und sind groß, aber manchmal Ihre spezifischer Anwendungsfall ist sehr stark von der lib behandelt und Sie große Vorteile gewinnen vom Schreiben Sie besitzen. Dies ist vor allem auf Konsolen im Vergleich zu PC

(edit :) In Bezug auf Skript und Garbage Collection: es wird tötet Sie auf einer Konsole, an einem neuen Spiel, das ich nur große Teile der Garbage Collection auf Unreal neu zu schreiben, hatte unsere Bedürfnisse zu füllen der Editor Teil. Wir hatten sogar mehr im eigentlichen Spiel getan werden (nicht nur von mir) (um fair zu sein, obwohl wir über Unreal ursprünglichen Spezifikationen schoben)

Scripting oft gut, aber es ist kein „Ich gewinne“ -Taste. In der Regel verschwinden die Gewinne, wenn Sie an die Grenzen Ihrer Plattform vorantreiben. Ich würde verwenden, wie meine Bewertungsfunktion „Prozent der Plattformen CPU, die ich habe zu ersparen“ in der Entscheidung, wie entsprechende Skript ist

Eine Überlegung für C / C ++ / obj-C ist, dass man verschiedene Bibliotheken für verschiedene Bereiche, die mischen und zusammenbringen. Mit anderen Worten, Sie sind nicht mit der Implementierung eines Merkmals in einem Rahmen stecken.

Ich benutze diesen Ansatz in meine Spiele ; mit Chipmunk für 2D-Physik, Lua als Skriptsprache eingebettet ist, und eine OpenGL ES Implementierung von Apple. Ich schreibe den Leim alles zusammen in einer C-Sprache zu binden. Das Endprodukt ist die Fähigkeit, Spielobjekte zu definieren, erstellen Sie Instanzen von ihnen, und behandeln Ereignisse, wie sie miteinander in C-Funktionen zu Lua ausgesetzt interagieren. Dieser Ansatz wird verwendet, in viele Hochleistungs-Spiele viel Erfolg.

Wenn Sie nicht bereits wissen, C ++, würde ich auf jeden Fall empfehlen Sie gehen vorwärts mit einer Skriptsprache. ein Spiel von Anfang bis Ende zu machen viel Motivation nimmt, und zwingen Sie sich eine neue Sprache zur gleichen Zeit zu lernen, ist ein guter Weg, die Dinge langsam genug gehen, dass Sie das Interesse verlieren (obwohl es ein guter Weg, um ein neues zu lernen Sprache ...).

Die meisten Skriptsprachen werden auf Byte-Code kompiliert werden, wie auch immer, so dass ihre größte Leistung getroffen wird die Garbage Collection sein. Ich bin nicht erfahren genug, um eine bestimmte Beschreibung, wie groß ein Hit Garbage Collection wäre zu geben, aber ich wäre geneigt zu glauben, dass es nicht so schlimm in einem kleinen Spiel sein sollte.

Auch, wenn Sie eine vorhandene Skriptsprache Bibliothek verwenden, Ihr Spiel zu machen, können die meisten der Leistung kritischen Bereichen (wie Grafiken) in C ++ geschrieben werden sowieso (hoffentlich durch die Spielbibliotheken). So 80% der CPU könnte tatsächlich in C ausgegeben werden ++ Code sowieso, trotz der Tatsache, dass die meisten Ihrer Projekt geschrieben in, sagen Python.

Ich würde sagen, fragen Sie sich, was Sie wollen mehr: ein Spiel von Anfang an zu schreiben, über die Entwicklung von Spielen zu beenden und zu lernen, oder eine neue Sprache (C ++) zu lernen. Wenn Sie ein Spiel schreiben wollen, tun Sie es in einer Skriptsprache. Wenn Sie eine neue Sprache lernen wollen, tun Sie es in C ++.

Ja, wenn Sie nur alle Details der Dinge lernen möchten, die in die Herstellung ein Spiel gehen, wollen Sie auf jeden Fall mit einem Game-Engine gehen und konzentrieren sich nur eher Ihre Spiellogik auf den Aufbau als die Details der verwendeten Grafiken, Audio, Ressourcenmanagement, etc.

Persönlich mag ich den Torque Game Builder (auch bekannt als Torque 2D) empfehlen von Garage . Aber man kann wohl da draußen einige kostenlose Spiele-Engines, die Ihren Bedürfnissen gerecht wird als auch.

Ich bin mir ziemlich sicher, dass die meisten modernen Spiele in C ++ fertig sind, nicht C (jedes Gaming Firma, die ich je mit fragte C ++ Fragen interviewt.)
Warum C ++ nicht und vorhandene Bibliotheken für Physik + Kollisionen, Ton, Grafik-Engine etc. Sie immer noch das Spiel schreiben, aber die banalen Sachen sind gesorgt.

Es gibt dort viele verschiedene Lösungen für das Problem zu abstrahieren und jeder beschäftigt sich mit ihm auf unterschiedliche Weise.

Mein aktuelles Projekt verwendet C #, DirectX 9, HLSL und SlimDX. Jede dieser bietet eine sorgfältig kalibriert Abstraktionsebene. HLSL ermöglicht es mir tatsächlich den Shader-Code zu lesen, ich schreibe und SlimDX / C # ermöglicht es mir, Zeiger, zirkuläre Abhängigkeiten und Umgang mit nicht verwalteten Code zu ignorieren.

Das heißt, keine dieser Technologien hat keine Auswirkungen auf die Leichtigkeit meine AI, Beleuchtung oder Physik zu entwickeln! Ich habe immer noch meine Lehrbücher in einer Art und Weise zu brechen, dass ich nicht mit einem übergeordneten Rahmen.

mit Selbst eines Frameworks wie XNA, wenn die meisten Videospiele Entwicklungskonzepte fremd Sie sind immer noch eine verdammt viel es in nehmen und zu lernen. XNA ermöglicht es Ihnen, ordentlich Gimbal Lock zu umgehen, aber wehe denen, die grundlegenden Konzepte Abschattung nicht verstehen. Auf der anderen Seite, so etwas wie Darkbasic Ihre Gimbal Lock Problem nicht lösen, aber Schattierung ist vor allem für Dich behandelt.

Es ist ein ausreichend großes Feld, das Ihr erster Motor nie diejenige, den Sie tatsächlich nutzen sein. Wenn Sie es selbst schreiben, werden Sie nicht schreiben Sie es gut genug. Wenn Sie Bibliotheken von Drittanbietern verwenden, gibt es sicherlich Aspekte, die Sie ärgern und Sie ersetzen möchten.

Als Idee, könnte es lohnt sich, verschiedene Bibliotheken / Frameworks sein (auf jeden Fall XNA machen eine Ihrer Stationen, auch wenn Sie sich entscheiden, Sie wollen nicht, es zu benutzen, es ist eine große Benchmark) und versuchen, verschiedene Prototypen zu bauen. Vielleicht eine Landschaft (mit einem Körper von Wasser) oder eine Weltraumphysik Demo.

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