Beaucoup d'amateurs de programmation se succèdent sur ce forum. Je pense que cela pourrait intéresser des gens que je vous explique un peu comment est réalisé Aurora.
1) Le mutlithreading."Mutlithreading", ce mot barbare signifie qu'Aurora fonctionne avec 2 programmes autonomes. Chacun de ces programmes peut utiliser un processeur différent. L’intérêt : c'est que quand le 2e programme fait des calculs, ça ne ralentit pas le framerate du premier programme.
Dans Aurora, le premier thread gère l'affichage et le 2e gère tout le reste : déplacement des personnages, IAs, collisions, expérience, combat...
Le 1er thread envoie les instructions du joueur : paramètres de la partie, ordres de déplacement, de combat, de construction...
Le 2e thread calcule tout le jeu et n'envoie que des instructions d'affichage : création d'un personnage, déplacement d'un personnage, animations de combat...
Le 2e thread n'envoie pas toutes les instructions, uniquement celles qui concernent le champ de vision du joueur. Si 500 monstres apparaissent à l'autre bout de la carte, les FPS du 1er thread ne ralentiront pas.
Les messages sont stockés en mémoire. Si le champs de vision est modifié, les messages en attente dans le nouveau champs de vision sont transmis. Bien entendu, les messages en double sont triés ou effacés.
C'est grâce à cela que le jeu se charge si rapidement sur de grandes cartes. Par contre, ça ralentit énormément la première fois que l'on dézoom.
Ce qui est génial avec ce système, c'est qu'Aurora est programmé comme un jeu en réseau. Quand j'ajouterai le multijoueur, le 2e joueur ne communiquera qu'avec le 2e thread du serveur et se contentera des informations d'affichage en retour. C'est comme cela que fonctionnent les jeux vidéos modernes. Cela permettra de rejoindre une partie en cours, de gérer les déconnexions et si le serveur est modifié, les messages tiendront compte des modifications.
2) Un héritage complexe.Dans Aurora, il y a plus 25 classes différentes pour gérer tous les personnages du jeu.
L'avantage d'un tel niveau d'héritage, c'est que chaque classe ne contient que les informations minimales. Elles seront plus rapides à créer et à détruire, consomment un minimum de mémoire et leurs fonctions sont réduites à l'essentielle. Dans Aurora, les monstres n'ont pas d'inventaire ni de compétence. Les autres villageois ne gagnent pas d'expérience.
C'est également plus pratique pour s'y retrouver car on ne se retrouve pas avec des classes composées de milliers de lignes.
3) les pools.Quand un personnage meurt, il n'est pas systématiquement détruit. Il est conservé en mémoire dans un pool. Si je recrée un personnage identique, plutôt d'en recréer un en partant de zéro, j'en réutilise un qui était dans un pool.
En utilisant des pools pour les projectiles, chaque fois que votre personnage tire une flèche, il renvoie systématiquement la même. On gagne en temps de calcul en supprimant la destruction et la construction d'une classe.
Si vous avez des questions pour vos projets, ce sujet est ouvert.