Je veux commencer à écrire mon moteur de jeu à partir de zéro à des fins d'apprentissage, quelles sont les conditions préalables et comment le faire, quels langages de programmation et les choses que vous me recommandez? De plus, si vous avez de bons articles et des livres à ce sujet, ce sera formidable. Merci d'avance!
Mes langages et outils de programmation sont:
- C / C ++ est-il bon d'utiliser uniquement du C?
- Python
- OpenGL
- Git
- GDB
Ce que je veux en apprendre:
- Moteur de jeu principal
- Rendu / Graphiques
- Jeu / Règles
- Entrée (clavier / souris / contrôleurs, etc.)
Dans le rendu / graphisme:
- 3D
- Ombres
- Éclairage
- Texturation
Réponses:
Vous pouvez écrire un moteur de jeu dans pratiquement n'importe quelle langue en utilisant pratiquement toutes les méthodes de rendu. Vous pouvez écrire un moteur de jeu en bash en utilisant la sortie console par exemple.
Donc, je pense qu'il serait préférable de définir exactement ce que vous voulez apprendre en écrivant votre propre moteur. Il y a beaucoup de "domaines" dans le développement de jeux.
Moteur de jeu principal
Rendu / Graphiques
AI
La mise en réseau
Jeu / Règles
Du son
Entrée (clavier / souris / contrôleurs, etc.)
etc. De là, vous pouvez même avoir des sous-thèmes. Dans le rendu / graphiques
2D ou 3D?
La modélisation
Ombres
Éclairage
Texturation
GUI / Huds / Interfaces.
etc
Un seul de ces sous-sous-sujets pourrait consommer de nombreuses heures (ou années!) D'étude!
Donc, définissez d'abord ce que vous voulez apprendre. Commencez simplement.
Utilisez la langue avec laquelle vous êtes à l'aise, bien que certaines soient mieux adaptées à certaines tâches. Par exemple, le moteur principal et le rendu sont probablement mieux faits avec un langage de niveau "inférieur" comme C / C ++ (si vous avez besoin de performances); mais quelque chose comme l'IA ou les règles du jeu pourrait être mieux fait dans un langage de niveau supérieur. Rien ne dit que vous ne pouvez pas mélanger et assortir. Vous pouvez écrire votre moteur en C ++, votre rendu en C (car cela fonctionne bien avec OpenGL), puis utiliser LUA pour écrire vos règles de jeu, etc.
En ce qui concerne l'exemple, il existe un moteur de jeu appelé Slick2D. Il est écrit en Java et est open source. C'est un exemple d'un simple moteur 2D écrit et très bien conçu. Vous pouvez en apprendre des concepts de base, comme les boucles de jeu, la gestion des états de jeu, etc.
Si vous êtes à l'aise avec C / C ++; Je suggère de jeter un œil à SDL / OpenGL. Il gère une partie de l'entretien ménager comme l'entrée, le son, la création de fenêtres, etc. et peut se concentrer sur d'autres choses.
la source
SDL + OpenGL est un excellent choix pour démarrer un moteur de jeu personnalisé.
J'utilise personnellement une version C-ish de C ++ parce que j'ai découvert que cela fonctionne le mieux pour moi. J'entends par là que je n'utilise aucune exception. Il y a deux raisons à cela: d'abord et avant tout, les exceptions nécessitent un code d'exception tout au long du chemin qui, avec OpenGL et SDL, n'est pas exactement facile à réaliser. Plus important encore, de cette façon, il est très facile d'exposer des objets C ++ sur le C ABI, ce qui est extrêmement utile si vous essayez d'intégrer un langage de script dans le mix.
Je suis dans un bateau similaire à vous et j'ai écrit certaines de mes aventures avec SDL et OpenGL dans un blog ( immersedcode.org ) au cas où quelqu'un d'autre serait intéressé.
Pour l'architecture générale, j'ai deux suggestions: si vous voulez un moteur 3D, consultez le livre "Game Engine Architecture" de Jason Lander. Si tout ce que vous voulez est 2D, gardez la conception aussi simple que possible et laissez-vous inspirer par XNA ou d'autres projets.
Enfin: n'appelez pas OpenGL partout. Rendez-vous service et isolez-le en quelques endroits afin d'avoir la possibilité de basculer entre le bureau OpenGL / OpenGL ES ou même DirectX ultérieurement si vous le souhaitez.
la source
N'utilisez pas C sauf si un détail d'implémentation vous y tient sous la menace d'une arme. Sinon, utilisez C ++, car c'est un langage beaucoup plus performant et vous pouvez toujours choisir de ne pas utiliser ces fonctionnalités plus tard. Personnellement, je n'ai rien pour / contre Python, je ne l'ai jamais utilisé.
Je ne recommanderais pas OpenGL contre DirectX parce que DX a une approche orientée objet moderne, qui est beaucoup plus propre et plus compréhensible / moins sujette aux erreurs. L'interface offerte par OpenGL est extrêmement pauvre en comparaison.
La dernière chose que j'ai, c'est que j'ai entendu de nombreuses personnes en qui j'ai confiance que GDB craint complètement, et le débogueur Visual Studio est de loin le meilleur. Ce n'est pas mon expérience personnelle, alors prenez-la avec un peu de sel.
la source
extern "C"
, et son utilisation appropriée rend l'écriture d'une interface C plutôt triviale, en particulier pour Python, où un convertisseur existe dans Boost qui facilite la liaison. Et les fonctionnalités du langage C ++? Ils sont super . Une plus grande utilisation des fonctionnalités du langage C ++ augmente la fiabilité d'un projet et la facilité de codage massif pour un compromis de performances très mineur très acceptable. Les fonctionnalités du langage de C sont pathétiques en comparaison. Par exemple, l'utilisation correcte d'un compilateur C ++ moderne ne garantit aucune fuite de mémoire. Faites cela en C.