Was ist der Unterschied zwischen einem Spielframework (z. B. XNA mit C #, SDL für c ++) und einer Spiel-Engine?
Verwenden Game Frameworks Engines? Enthält eine Spiel-Engine Sub-Engines wie Physik-Engines, Partikel-Engines usw.? Sollten sie zusammen verwendet werden oder schließen sie sich gegenseitig aus?
Ich nehme an, es gibt separate Engines für 2D und 3D?
Kommentare
- Verwandte Themen: Was ist der Unterschied zwischen einer Bibliothek und einer Engine?
Antwort
Es gibt wirklich keine strengen Definitionen für „Engine“ oder „Framework“.
Im Allgemeinen wird eine Engine als „mehr tun“ angesehen. oder haben mehr Tools und zugehörige Unterstützung als ein Framework, das selbst oft nur eine lose Sammlung verwandter Funktionen ist, die durch eine einheitliche API verfügbar gemacht werden.
Zu diesem Zweck können Dinge, die behaupten, Engines zu sein, Dinge verwenden, die behaupten, Frameworks zu sein, um Funktionalität zu erreichen, aber das muss nicht immer der Fall sein. Ebenso kann eine Sache, die behauptet, eine Spiel-Engine zu sein, behaupten, dass ihre Bestandteile (Physik und Rendering usw.) mit a implementiert sind Physik-Engine oder ein Physik-Framework. Die Arten von Technologie, auf die sich beide Begriffe beziehen, können austauschbar verwendet werden oder nicht.
Es kann „Engines“ oder „Frameworks“ für fast alles geben – Physik, Sound und sogar 2D- oder 3D-Grafiken.
Es ist wirklich nur eine Terminologie Problem, und es ist im Allgemeinen nicht viel wichtig. Aus funktionaler Sicht, die sich auf die Erstellung Ihres Spiels konzentriert, sollte es darauf ankommen, ob die betreffende Technologie das liefert, was Sie für die Erstellung Ihres Spiels benötigen. Ob es sich selbst als Engine oder als Framework bezeichnet, hat keinen Einfluss darauf.
Antwort
Einfache Definition, die ich verwende : Sie können eine Engine auf einem Framework erstellen, aber Sie würden niemals ein Framework auf einer Engine erstellen. Eines ist das Skelett, das die Architektur und den Programmfluss bestimmt, das andere ist der Muskel, der die Arbeit erledigt.
Für einen Beton Zum Beispiel ist Artemis ein hübsches kleines Framework zum Erstellen von Komponentensystemen, aber Sie würden es niemals als Engine bezeichnen. Sie können Artemis-Systeme und Standardkomponenten erstellen, um daraus eine Engine zu erstellen.
Kommentare
- In meiner Firma hat jemand ein Framework über die Engine entworfen. Dieses Framework dient als Sammlung fehlender Teile, die die Engine ‚ nicht bereitstellt, und vereint Dinge, die ansonsten in unserer (alten) Engine etwas unordentlich sind. Und bietet Helfer zur Erleichterung der Entwicklung.
Antwort
Ein Framework ist eine Sammlung von (normalerweise) Bibliotheken niedrigerer Ebene und Hilfsmittel, mit denen Sie tun können, was zum Teufel Sie wollen (Grafiken, Sounds usw.). Ein Framework hat nichts mit Spielen zu tun, außer dass es normalerweise für Spiele optimiert oder entwickelt wurde, die in Spielen üblich sind.
Beispiel: Mit einer Engine können Sie eine Liste von Entitäten mit jeweils einer Position erstellen Auf der Karte. Mit einem Framework können Sie ein 3D-Objekt an einer bestimmten Position rendern.
Sie verbinden sie also, indem Sie jedem Ihrer Objekte ein 3D-Objekt geben und es bei Bedarf rendern.
Und ta-da, Sie haben ein Spiel.
Antwort
Für eine wirklich detaillierte Erklärung empfehle ich, das eine und zu lesen Nur Bibel Game Engine-Architektur von Jason Gregory. Ich denke, es ist die vollständigste Arbeit zu diesem Thema seit seiner Veröffentlichung. Sie behandelt nicht nur den C ++ – Teil, sondern auch auch und wichtig für jeden Game-Engine-Programmierer die Theorie / Architektur dahinter. Es ist ein guter Ausgangspunkt, unabhängig von der Sprache. Um einen Überblick zu erhalten, sprechen wir über dieses Bild aus dem Buch
Lassen Sie mich versuchen, die Frage zu beantworten.
Was auch immer Sie schreiben, es wird Code sein 🙂 Schreiben Sie nach jahrelanger Erfahrung, was Sie brauchen und wie Sie es brauchen, oder verwenden Sie, was Ihnen das bietet, was Sie brauchen.
Die Begriffe engine und Framework kommen von der Softwarearchitektur zusammen mit anderen Begriffen. Beginnen wir also mit den Grundbegriffen und gehen wir nach oben.
Bibliothek
Typische Beispiele: Eine Mathematikbibliothek mit allen grundlegenden Typen und Funktionen für mathematische Berechnungen (Vektor, Matrix, …) oder eine Bildbibliothek (JPEG oder PNG) mit Funktionen zum Schreiben von JPEG- oder PNG-Bildern
In Unity 3D ist Math ein Mathe-Libray.
Theorie: Ein Libray bietet spezielle Funktionen für ein Thema (z. B. Mathe) ) AND wird vom Programmierer bei Bedarf aufgerufen.
Vorschau: Es kann Bibliotheken geben, die Frameworks enthalten, auch bekannt als Framework-Bibliothek.
Framework
Theorie: Ein Framework führt eine Inversion der Steuerung ein. Dies bedeutet, dass der Entwickler die Framework-Methoden meistens nicht aufruft, das Framework jedoch den Code des Entwicklers. Ausnahmen sind, wenn Sie die Framework-Bibliothek in Ihren Code integrieren und das Framework starten müssen. Eine Framework-Bibliothek bietet alle Methoden und Funktionen sowie Schnittstellen für ein Framework mit einer dedizierten Verwendung. Frameworks können sich also in einer Bibliothek befinden.
Typisches Beispiel: Das Unity 3D MonoBehaviour bietet Methoden wie Awake, Start, OnUpdate. Der Entwickler implementiert diese Methoden und dann werden diese Methoden vom Framework (Game Object Management) aufgerufen (dies ist die Umkehrung der Steuerung) . Gleiches gilt für die Methoden OnCollisionEnter, OnCollisionExit. Sie befinden sich im selben Monobehaviour, aber ich wette, sie werden vom Physik-Framework aufgerufen.
Eine Vorschau: Engine, Runtime, Editor, SDK
Da der Begriff Engine immer etwas vage war und immer noch eine Erklärung für die Vorschau enthält (und mit weiteren technologischen Entwicklungen nicht besser wird).
Der Begriff Engine wird für mehrere Dinge verwendet und es kann nicht eindeutig gesagt werden, welche richtig ist. Als ich 2004 zum ersten Mal Kontakt mit dem Schreiben von Game-Engines hatte, war das auch vage. Sie hatten eine Spiel-Engine im Sinne eines Codes, der vordefinierte Daten lädt und Sie das Spiel spielen lässt. Da vordefinierte Daten geladen werden, wurden sie als datengesteuerte Engines bezeichnet. Sie kompilieren sie einmal und die externen Daten könnten verschiedene Spiele gewesen sein, ohne sie neu zu kompilieren. Zu einem bestimmten Zeitpunkt war dies dasselbe wie bei einer Laufzeit.
Der Editor ist klar. Hier können Sie die vordefinierten Daten definieren, die von der Engine / Laufzeit geladen werden.
Eine Engine mit einem Editor wurde als SDK (z. B. Hammer SDK) bezeichnet.
Dann gab / gibt es dedizierte Engines. Eine Phyiscs-Engine, eine Rendering-Engine, eine Sound-Engine, eine Gameobject-Management-Engine, eine Netzwerk-Engine usw.
Meiner persönlichen Meinung nach handelt es sich nicht um Engines (insbesondere eine Render-Engine ist KEINE Game-Engine, da dies nur der Fall ist Rendern). Wenn ich die Google Game Engine google, enthalten die Ergebnisse 90% reine Render-Engines, die keine Game Engines sind. Ich würde sie alle Bibliotheken nennen, aber da sie möglicherweise vordefinierte Daten laden, stimmen sie mit dem Begriff datengesteuerte Engine überein.
Eine letzte kurze Randnotiz, bevor wir auf Details eingehen: Ich habe erfolgreich einen Master-Abschluss in gemacht Informatik. Meine Masterarbeit befasste sich mit dem Thema „Wie man den Kern einer Game Engine entwickelt“. Das heißt, der Teil des Codes, der alle anderen Engines zusammenfasst, die Verwaltung der Spielobjekte, die Spielschleife usw.
Ich habe meine Masterarbeit als (kurzes) Buch veröffentlicht. Der einzige Kommentar eines Käufers / Lesers zu Amazon lautet (nach einigen Jahren): Hier geht es nicht um eine Spiel-Engine. Seit ich meinen Abschluss erfolgreich gemacht habe und meine Diplomarbeit gegen 3 erfahrene Programmierer verteidigt habe (2 davon für Spiele und interaktive Anwendungen), habe ich vermutlich eine Spiel-Engine geschrieben.
Editor
Einfach: Mit dieser Option können Sie die Daten in dem Format definieren, in dem die anderen Teile sie benötigen, und müssen daher diese Dateien nicht mehr schreiben von Hand oder verwenden Sie externe Tools, um sie zu erstellen.
Dies ist, was der Unity 3D-Editor tut.
Laufzeit
Dieser Begriff wird häufig gleichermaßen mit der Engine verwendet (was richtig oder falsch sein kann).
Die Laufzeit führt die generierten Daten aus und macht das, was sie mit den Daten zu tun hat. Zeigen Sie Ihnen beispielsweise das Spiel und lassen Sie das Spiel spielen. Es werden keine Daten erstellt (außer möglicherweise Spiele speichern), was bedeutet, dass Sie das Spiel selbst nicht ändern können.
Der Unity Web Player ist / war eine Laufzeit, mit der Sie Unity-Spiele in einem Webbrowser spielen können.
Sie können mehrere verschiedene Spiele mit derselben Laufzeit laden und ausführen.
Bei der Unity 3D-Skript-API gibt es einen Unterschied zwischen Funktionen, die im Spiel funktionieren, und Funktionen Dies funktioniert nur im Editor.
SDK
Dieser Begriff wird häufig auch als Framework bezeichnet.
Damals war ein SDK ein Bündel von Tools wie Ein Editor, eine IDE (integrierte Entwicklerumgebung) für Programmierer, Exporteure für Datenformate und die Laufzeit / Engine.
Ein SDK / Framework bietet Ihnen also einen vordefinierten Workflow und Dienstprogramme und zeigt Ihnen einen (gut gestalteten) Weg wie man (leicht) ein Spiel erstellen kann.
Grundsätzlich wäre die Unity 3D-Engine falsch, da sie mehr in die SDK-Richtung passt. Da Unity jedoch noch mehr ein neues Wort / eine neue Definition ist, um dem zu entsprechen, was es ist.
Um den anderen Begriff einzuführen, bietet Ihnen ein SDK / Framework eine vordefinierte Pipeline für die Spieleentwicklung (nicht nur ein Asset) Pipeline, aber vielleicht, wie Unity, eine Pipeline für Assets, Logik, Builds, Bereitstellungen, …)
Engine
Sarkasmus bei Wird für alles verwendet, da jeder cool sein möchte Schreiben Sie nicht nur eine Bibliothek, ein Framework oder ein Spiel, sondern auch eine vollständige Engine. Sarkasmus aus
Lasst es uns auslösen:
Eine Engine
- ist ein Code / eine Software
- , die mehrfach verwendet werden soll Projekte (Sie können auch eine Spiel-Engine für nur ein Spiel schreiben)
- für die Wiederverwendung Die Spiel-Engine trennt den wiederverwendbaren Teil vom spielspezifischen Teil
- für die Wiederverwendung (je nachdem, wie es ist Wiederverwendung vorgesehen) Es gibt verschiedene Varianten wie eine datengesteuerte Engine , die externe Daten lädt
Ein Motor kann aus mehreren anderen Motoren bestehen (da heutzutage alles als Motor bezeichnet wird). Eine Spiel-Engine kann
- eine Render-Engine enthalten, die das Rendern ausführt (WIEDER: Gott, verdammt, Hölle: Code, der nur rendert, IST KEINE Spiel-Engine)
- eine Physik-Engine Physik machen (es ist eine Physik-Engine, keine Game-Engine)
- eine AI-Engine, die das AI-Zeug handhabt (es ist eine AI-Engine und keine Game-Engine)
- a Netzwerk-Engine (z. B. RakNet), die das Netzwerk-Zeug ausführt (es ist eine Netzwerk-Engine, keine Game-Engine)
- eine Audio-Engine, die das Audio-Zeug ausführt (es ist eine Audio-Engine und keine Game-Engine)
Ein Beispiel für eine Anwendung, die auf einer Kern-Engine basiert und ein Plug-in-basiertes Framework bereitstellt, um alles in einem komponentenbasierten Spielobjekt-Verwaltungsmodell zusammenzuführen. Jede Subengine (Rendering Audio) ist ein Modul, das der Game Engine als Plug-In hinzugefügt wird. Jede Komponente kann Teil einer Subengine / eines Moduls sein. Die (komponentenbasierte) Verwaltung von Spielobjekten ist das Verbindungsglied zwischen den einzelnen Modulen.
Die nächstgelegene Definition für Game Engine
Eine -Spielmaschine ist der Teil des -Quellcodes Ihres Spiels, das alle Funktionen bietet, dh soll wiederverwendet werden für mehrere Spiele und lässt Sie codieren und dein Spiel. Daher gibt es zusammen alle anderen Teile des Codes (Rendering, Audio, Physik, Verwaltung von Spielobjekten, Vernetzung) entweder Bibliotheken, Frameworks oder dedizierte Engines (Rendering, Physik, …).
Die Spiel-Engine ist das Chaos in der Mitte.
Antwort
Wie @Josh bereits sagte, gibt es keine strenge Definition von Framework oder Engine, aber im konzeptionellen Sinne handelt es sich bei beiden um sehr unterschiedliche Tools.
Ein Framework enthält eine grundlegende API-Abastraktion, mit der der Benutzer auf höherer Ebene mit der Plattform oder der Funktionalität interagieren kann, ohne sich (allgemein) um Leistung, Kompatibilität usw. sorgen zu müssen. In den von Ihnen angegebenen Beispielen ist SDL ein Framework Sie verzichten auf die Plattform und können Ihre Software hinter dieser Ebene erstellen, ohne sich um Fensterverwaltung, betriebssystemspezifische Dinge usw. kümmern zu müssen. Wenn Sie eine ganze Software erstellen möchten, benötigen Sie eine andere Frameworks, zB SDL zur Verwaltung der Medien- und Plattform-Inhalte, Box2D zur Verwaltung der Physik usw.
Eine Engine ist anders. In diesem Fall liefert das Tool alles, was für die Entwicklung benötigt wird. Eine Physik-Engine stellt Ihnen diese zur Verfügung Mit allem, was für die Verwaltung der Physik erforderlich ist, und einer benutzerfreundlichen API. Wenn Sie also eine Physiksimulation erstellen möchten, benötigen Sie keine andere Bibliothek von Drittanbietern. Engines sind nicht mehr als eine Sammlung von Frameworks, anderen Engines, Schnittstellen, Snippets und allgemeinem Code, die alles bieten, was zum Abschließen des Projekts erforderlich ist, ohne dass andere Dritte benötigt werden oder sich um Dinge auf niedrigerer Ebene kümmern müssen.