Comment programmer un moteur 2D?
Bien qu'il existe de nombreux moteurs sur le Web. Cependant, en créer un vous fera réaliser le véritable pouvoir de la programmation. C'est un bon début pour passer aux graphiques 3D.
Partie 1 sur 4: rassembler vos outils
- 1Maîtriser une langue. C'est l'étape la plus basique de ce que vous sélectionnez. Vous pouvez utiliser C/C++ avec certaines fonctions réécrites en assembleur. Cela rendra votre moteur plus rapide et révélera le plus profond des bibliothèques que vous utilisez.
- C est un bon choix et rapide.
- C++ est bien meilleur dans la conception, mais souffre un peu des performances.
- Java peut être bon. Il est indépendant du système d'exploitation, rapide et structuré.
- L'assemblage est difficile, mais le contrôler est le meilleur pari.
- 2Sélectionnez une API (facultatif). Vous pouvez commencer avec une API comme OpenGL ou DirectX, mais cela dépend de votre aventure. Si vous voulez un moteur fiable et que vous ne voulez pas perdre de temps, utilisez une API. Mais si vous avez beaucoup de temps et que vous voulez apprendre l'essentiel du moteur, alors la recommandation est simple: partez en solo.
- 3Apprenez les définitions de base. Vous devez rechercher sur le Web un contenu fiable sur des éléments tels que les graphiques raster, les graphiques vectoriels, les éclairs et les ombres, les collisions, la physique (pour une simulation de combat, bien sûr) et bien plus encore.
- Wikipédia est votre meilleur ami. Recherchez ses portails et vous trouverez des connaissances étonnantes sur tous les aspects.
- L'achat de livres sur les jeux de programmation peut s'avérer utile.
- 4Préparez votre esprit. Vous serez frustré par la difficulté du travail, mais ne revenez pas en arrière. Soyez toujours motivé. Apprendre. Créer. Ne regarde pas en arrière.
Partie 2 sur 4: préparation de la conception
- 1Pensez à ce que vous voulez faire. Préparez une idée de ce que vous ferez et de ce que vous ne ferez pas. Vider votre esprit à cette étape vous aidera à long terme.
- 2Rassemblez vos graphiques. Dessinez vos graphiques requis, comme l'écran, les joueurs, etc.
- 3Divisez l'ensemble de votre moteur en différentes parties parallèles. Comme vous le savez peut-être, la programmation parallèle est plus rapide. Alors divisez-le. Certaines portions comprennent: -
- Pipeline de rendu
- La gravité
- IA
- Écran suivant
- Contrôler les éléments ci-dessus (les plus importants!)
- 4Créez des algorithmes ponctuels pour les éléments. Pensez simplement à ce qui va arriver, comment et pourquoi et qui va y arriver. Cela aidera dans le codage.
- Donald Knuth a déclaré que les pré-optimisations sont la racine du mal. Jetez les pièces les plus rapides et les plus lentes et concentrez-vous sur le moteur. Mais n'oubliez pas de les trier une fois le moteur terminé.
Partie 3 sur 4: coder les éléments de base
- 1Codez le raster. Le raster est l'affichage de chaque pixel à l'écran.
- Utilisez le format "ignorer la couleur" pour effacer l'image précédente. Dans BitBlt de Windows, cela a un code raster BLACKNESS et WHITENESS. Notez que, vous devez dessiner le fond de l'écran si vous l'avez.
- Utilisez le format "ET" pour dessiner le Sprite de l'image. Dans BitBlt de Windows, il s'agit du code raster: SRCAND.
- Utilisez le format ci-dessus pour dessiner une texture sur le sprite.
- 2Coder la physique. Vous devrez comprendre et assurer la dynamique de votre environnement.
- 3Ajouter de l'éclairage. À proprement parler, l'éclairage n'est pas requis dans les moteurs 2D, mais vous pouvez l'ajouter si vous le souhaitez.
- 4Gérer les ombres. Vous pouvez utiliser la technique du volume d'ombre pour les ombres. Cependant, ce n'est pas nécessaire puisque vous n'avez pas besoin d'éclairage.
- 5Codez l'IA. Selon le type de moteur et de jeu, vous pouvez penser à vous-même que "Que ferais-je dans cette situation" et créer son algorithme. Par exemple, dans une simulation de combat, si l'IA est au 4e étage et qu'il y a 2 adversaires au premier étage et un lance-roquettes apparu au 3e étage, alors au lieu d'aller directement au premier étage, l'IA devrait se diriger vers le 3ème étage. Si vous utilisez la POO, alors dans votre classe d'IA, ce sera une fonction de décision.
Partie 4 sur 4: optimisation
- 1Utilisez la mise en mémoire tampon double écran. Cela implique de tout dessiner sur un bitmap dans la mémoire, puis de dessiner le bitmap à l'écran. Ce sera un peu lent et la mémoire inefficace, mais cela supprimera le scintillement et rendra le moteur plus fluide.
- 2Considérez la séquence d'étapes dans les algorithmes. Par exemple, dans une animation simple, un algorithme simple indiquera que "erase:decide:draw". Cependant, si la décision est plus complexe, il y aura une différence significative dans l'effacement et le dessin, produisant un scintillement. Vous devez utiliser "decide:erase:draw".
- 3Utilisez des répartiteurs personnalisés. Lorsque le moteur démarre, occupez une quantité utile de RAM et divisez-la dans votre moteur à l'aide de la programmation. Le système d'exploitation est occupé et montrera une latence pour répondre à votre demande, alors ayez de la RAM à l'avance.
- 4Utilisez votre cache à bon escient. Utilisez souvent certains des éléments les plus importants afin qu'ils soient stockés dans le cache L1. Faire cela accélérerait les choses. Le cache de L2 utilise 7ns, alors que la lecture de 1 Mo depuis la RAM prend 250 us.
- 5Assurez-vous d'utiliser le traitement parallèle. Utilisez les instructions spéciales SIMD pour travailler en parallèle. De plus, profitez pleinement de tant de cœurs de processeur en créant des unités parallèles. La fonction CreateThread sous Windows et Fork sous Linux sont bénéfiques.
- 6Assurez-vous que votre monde parallèle accède également au GPU. Les derniers GPU intégrés disposent de 10 cœurs d'exécution à 1200 MHz. Trop lent pour rivaliser avec la GTX 8800, mais c'est excessif pour votre moteur.
En parallèle