Quelle est la différence entre un framework de jeu (par exemple, XNA avec C #, SDL pour c ++) et un moteur de jeu?
Les frameworks de jeux utilisent-ils des moteurs? Un moteur de jeu encapsule-t-il des sous-moteurs tels que des moteurs physiques, des moteurs à particules, etc.? Devraient-ils être utilisés ensemble ou sont-ils exclusifs lun à lautre?
Je suppose quil existe des moteurs distincts pour la 2D et la 3D?
Commentaires
- Connexes: Quelle est la différence entre une bibliothèque et un moteur?
Réponse
Il ny a vraiment pas de définitions strictes pour « moteur » ou « framework ».
De manière générale, un moteur est considéré comme « faire plus » ou ont plus doutils et de support associé quun framework, qui nest souvent quun ensemble de fonctionnalités connexes exposées via une API unifiée.
À cette fin, les éléments qui prétendent être des moteurs peuvent utiliser des éléments qui prétendent être des frameworks pour atteindre la fonctionnalité, mais cela ne doit pas toujours être le cas. De même, une chose qui prétend être un moteur de jeu peut prétendre que ses parties constitutives (la physique et le rendu, etc.) sont implémentées avec un moteur physique ou un framework physique. Les types de technologie référencés par les deux termes peuvent être utilisés de manière interchangeable ou non.
Il peut y avoir des « moteurs » ou des « frameworks » pour à peu près tout – la physique, le son, et oui, même les graphiques 2D ou 3D.
Cest vraiment juste une terminologie problème, et il n « importe généralement pas beaucoup. Du point de vue des fonctionnalités, une perspective centrée sur la création de votre jeu, ce qui importe, cest de savoir si la technologie en question fournit ou non ce dont vous avez besoin pour créer votre jeu. Quil sappelle lui-même un moteur ou un framework naura aucune incidence sur cela.
Réponse
Définition simple que jutilise : vous pouvez construire un moteur sur un framework mais vous ne construiriez jamais un framework sur un moteur. Lun est le squelette qui détermine larchitecture et le déroulement du programme, lautre est le muscle qui fait le travail.
Pour un béton Par exemple, Artemis est un petit cadre pour la construction de systèmes de composants, mais vous ne l’appeleriez jamais un moteur. Vous pouvez construire des systèmes Artemis et des composants standard pour créer un moteur à partir de celui-ci.
Commentaires
- Dans mon entreprise, quelquun a conçu un cadre sur le moteur. ce framework sert de collection de pièces manquantes que le moteur ne fournit pas ‘ t, unifie des choses qui sont autrement un peu désordonnées dans notre (ancien) moteur. Et fournit des aides pour faciliter le développement.
Réponse
Un framework est une collection de bibliothèques (généralement) de niveau inférieur et des trucs daide que vous pouvez utiliser pour faire tout ce que vous voulez (graphismes, sons, etc.). Il ny a rien de lié au jeu dans un framework sauf quils « sont généralement optimisés ou conçus pour faire des choses qui sont courantes dans les jeux.
Exemple: un moteur vous permet davoir une liste dentités, chacune avec une position sur la carte. Un framework vous permet de rendre un objet 3D à une certaine position.
Donc, vous les connectez en donnant à chacune de vos entités un objet 3D, et les restituer si nécessaire.
Et ta-da, vous avez un jeu.
Réponse
Pour une explication vraiment détaillée, je recommande de lire celle-ci et seulement la bible Game Engine Architecture par Jason Gregory. Je suppose que cest le travail le plus complet sur ce sujet depuis sa publication. Il ne gère pas seulement la partie C ++ mais aussi et important pour chaque programmeur de moteur de jeu la théorie / architecture derrière. Cest un bon point de départ indépendant du langage. Pour avoir un aperçu, ce dont nous parlons est cette image du livre
Je vais essayer de répondre à la question.
Quoi que vous écriviez, ce sera du code 🙂 après des années dexpérience, écrivez ce dont vous avez besoin et comment vous en avez besoin ou utilisez ce qui vous fournit ce dont vous avez besoin.
Les termes engine et framework viennent de larchitecture logicielle avec dautres termes. Commençons donc par les termes de base et allons vers le haut.
Bibliothèque
Exemples typiques: une bibliothèque mathématique fournissant tous les types et fonctions de base pour les calculs mathématiques (Vector, Matrix, …) ou une bibliothèque dimages (jpeg ou png) fournissant la fonctionnalité pour écrire des images jpeg ou png
Dans Unity 3D, Math est une bibliothèque mathématique.
Théorie: une bibliothèque fournit des fonctionnalités dédiées autour dun sujet (ex. ) AND est appelé par le programmeur à la demande .
Un aperçu: il peut y avoir des bibliothèques contenant des frameworks aka étant une bibliothèque de framework.
Framework
Théorie: Un framework introduit une inversion de contrôle . Cela signifie que le développeur la plupart du temps nappelle pas les méthodes du framework mais que le framework appelle le code du développeur. Les exceptions sont lorsque vous devez intégrer la bibliothèque de framework dans votre code et démarrer le framework. Une bibliothèque de framework fournit toutes les méthodes et fonctions et interfaces pour un framework avec un usage dédié. Ainsi, les frameworks peuvent être dans une bibliothèque.
Exemple typique: Le Unity 3D MonoBehaviour fournit des méthodes comme Awake, Start, OnUpdate. Le développeur implémente ces méthodes puis ces méthodes sont appelées par le framework (gestion des objets de jeu) (cest linversion du contrôle) . De même avec les méthodes OnCollisionEnter, OnCollisionExit. Ils sont dans le même Monobehaviour mais je parie quils sont appelés par le framework physique.
Un aperçu: Engine, Runtime, Editor, SDK
Puisque le terme moteur a toujours été un peu vague et est toujours (et il ne saméliore pas avec les développements technologiques ultérieurs) une explication préliminaire.
Le terme moteur est utilisé pour plusieurs choses et on ne peut pas dire de manière unique laquelle est la bonne. En 2004, lorsque jai eu des contacts avec les moteurs de jeux décriture, cétait vague aussi. Vous aviez un moteur de jeu dans le sens dune sorte de code chargeant des données prédéfinies et vous permettant de jouer au jeu. Puisquil charge des données prédéfinies, on les appelle des moteurs pilotés par les données. Vous les compilez une fois et les données externes auraient pu être des jeux différents sans les recompiler. À un moment donné, cétait la même chose quun runtime.
Léditeur est clair. Il vous permet de définir les données prédéfinies chargées par le moteur / runtime.
Un moteur avec un éditeur sappelait SDK (par exemple Hammer SDK).
Ensuite, il y avait / il y a des moteurs dédiés. Un moteur de phyisques, un moteur de rendu, un moteur de son, un moteur de gestion dobjet de jeu, un moteur de réseau, ….
À mon avis, ce ne sont pas des moteurs (surtout un moteur de rendu NEST PAS un moteur de jeu puisquil ne le rendu). Quand je google game engine, les résultats contiennent 90% de moteurs de rendu purs qui ne sont pas des moteurs de jeu. Je les appellerais toutes bibliothèques, mais comme elles peuvent charger des données prédéfinies, elles correspondraient au terme moteur basé sur les données.
Une dernière petite remarque avant dentrer dans les détails: jai obtenu avec succès une maîtrise en linformatique. Ma thèse de master portait sur le thème « comment développer le noyau dun moteur de jeu ». Cest-à-dire la partie du code qui rassemble tous les autres moteurs, soccupe de la gestion des objets du jeu, de la boucle de jeu, etc …
Jai publié mon mémoire de master sous forme de (court) livre. Le seul commentaire sur Amazon dun acheteur / lecteur est (après quelques années): il ne sagit pas dun moteur de jeu. Depuis que jai obtenu mon diplôme avec succès et donc soutenu ma thèse contre 3 programmeurs expérimentés (dont 2 dédiés aux jeux et applications interactives) je suppose que jai écrit un moteur de jeu.
Editor
Facile: vous permet de définir les données dans le format dont les autres parties les nécessitent et élimine donc la nécessité décrire ces fichiers à la main ou utilisez des outils externes pour les créer.
Cest ce que fait léditeur Unity 3D.
Runtime
Ce terme est souvent utilisé de la même manière avec le moteur (ce qui peut être correct ou incorrect).
Le moteur dexécution exécute les données générées et fait ce quil a à faire avec les données. Par exemple, vous montrer le jeu et vous laisser jouer le jeu. Il ne crée aucune donnée (sauf peut-être sauvegarder des jeux) dans le sens où vous ne pouvez pas modifier le jeu lui-même.
Le lecteur Web Unity est / était un runtime vous permettant de jouer à des jeux Unity dans un navigateur Web.
Vous pouvez charger et exécuter plusieurs jeux différents avec le même runtime.
Dans le cas de lAPI de script Unity 3D, il y a une coupure entre les fonctionnalités qui fonctionneront dans le jeu et les fonctionnalités cela ne fonctionnera que dans léditeur.
SDK
Ce terme est souvent également appelé framework .
À lépoque, un SDK était un ensemble doutils comme un éditeur, IDE (environnement de développement intégré) pour les programmeurs, exportateurs pour les formats de données et le moteur dexécution.
Ainsi, un SDK / framework vous fournit un flux de travail et des utilitaires prédéfinis et vous montre une manière (bien conçue) comment vous pouvez (facilement) créer un jeu.
Fondamentalement, le moteur Unity 3D serait erroné car il sintégrerait davantage dans la direction du SDK. Mais comme Unity est encore plus un nouveau mot / définition est nécessaire pour correspondre à ce quil est.
Quoi quil en soit, pour introduire lautre terme, un SDK / framework vous fournit un pipeline de développement de jeu prédéfini (pas seulement un atout pipeline mais peut-être, comme Unity, un pipeline pour les actifs, la logique, les builds, les déploiements, ….)
Engine
sarcasme sur Utilisé pour tout car tout le monde veut être cool en écrivant non seulement une bibliothèque, un framework ou un jeu mais mieux écrire un moteur complet. sarcasm off
Déclenchons-le:
Un moteur
- est un morceau de code / logiciel
- il est destiné à être réutilisé en plusieurs projets (vous pouvez également écrire un moteur de jeu pour un seul jeu)
- pour être réutilisé, le moteur de jeu sépare la partie réutilisable de la partie spécifique au jeu
- pour être réutilisable (selon la façon dont il est destiné à être réutilisé) il existe différentes versions comme un moteur basé sur les données chargeant des données externes
Un moteur peut être composé dautres moteurs multipe (puisque tout sappelle un moteur de nos jours). Un moteur de jeu peut inclure
- un moteur de rendu effectuant le rendu (AGAIN: god, damn, hell: le code ne faisant que le rendu NEST PAS un moteur de jeu)
- un moteur physique faire de la physique (cest « un moteur de physique, pas un moteur de jeu)
- un moteur dIA qui gère les trucs dIA (cest un moteur dIA et non un moteur de jeu)
- a moteur de réseau (par exemple RakNet) faisant le truc du réseau (cest un moteur de réseau, pas un moteur de jeu)
- un moteur audio faisant le truc audio (cest un moteur audio et non un moteur de jeu)
Un exemple dapplication basée sur un moteur principal fournissant un cadre basé sur des plug-ins pour tout regrouper dans un modèle de gestion dobjets de jeu basé sur des composants. Chaque sous-moteur (rendu audio) est un module ajouté au moteur de jeu en tant que plug-in. Chaque composant peut faire partie dun sous-moteur / module. Et la gestion des objets de jeu (basée sur les composants) est le lien de connexion entre les modules séparés.
La définition la plus proche pour Game Engine
Un moteur de jeu fait partie du code source de de votre jeu qui fournit toutes les fonctionnalités qui est destiné à être réutilisé sur plusieurs jeux et vous permet de coder et dexécuter votre jeu. Par conséquent, indexe ensemble toutes les autres parties du code (rendu, audio, physique, gestion des objets de jeu, mise en réseau) qui sont soit des bibliothèques, des frameworks ou des moteurs dédiés (rendu, physique, …).
Le moteur de jeu est le désordre au milieu.
Réponse
Comme @Josh la déjà dit, il ny a pas de définition stricte du framework ou du moteur mais, dans un sens conceptuel, les deux sont des outils très différents.
Un framework contient une abastraction API de base avec laquelle travailler, donnant à lutilisateur des outils de plus haut niveau pour interagir avec la plate-forme ou la fonctionnalité sans se soucier (généralement) des performances, de la compatibilité, etc. Dans les exemples que vous avez donnés, SDL est un framework, cela donne vous vous abstenez sur la plate-forme, et vous pouvez créer votre logiciel derrière cette couche sans vous soucier de la gestion des fenêtres, des éléments spécifiques au système dexploitation, etc. Si vous voulez créer un logiciel entier, vous aurez besoin de différents frameworks, par exemple SDL pour gérer les médias et les plates-formes, Box2D pour gérer la physique, etc.
Un moteur est différent, dans ce cas, loutil fournit tout le nécessaire pour le développement, un moteur physique vous fournira avec tout le nécessaire pour gérer la physique et livrera une API facile à utiliser, donc, si vous souhaitez créer une simulation physique, vous naurez pas besoin dune autre bibliothèque tierce. Les moteurs ne sont rien de plus qu’un ensemble de frameworks, d’autres moteurs, d’interfaces, d’extraits de code et de code général qui fournissent tout le nécessaire pour mener à bien le projet sans avoir besoin d’autres tiers ni se soucier des éléments de niveau inférieur.