La structure d'un moteur de jeu moderne suit invariablement le même schéma :
La norme actuelle est de réussir à faire un tour de boucle en 1000/60 = 16.666ms, pour avoi run affichage en 60fps
La plupart des écrans ont un taux de rafraîchissement de 60Hz, donc ça ne sert à rien d'aller plus vite.
Il n'y a pas grand chose à dire. Une façon courante de l'implémenter est de :
C'est ici qu'on implémente la logique du jeu. Par exemple
C'est aussi ici qu'on peut mettre une IA pour s'occuper des objets contrôlés par le jeu
Il est courant de découper cette boite en plusieurs sous boites
C'est ici que l'on déplace les éléments mobiles (par exemple, le boulet de canon qui a une certaine vitesse et déplacée d'un certain nombre de pixels)
C'est ici que l'on détecte les collisions, c'est à dire les interactions entre deux objets du monde.
Pour chaque collision détectée, et une fois qu'on a détecté toutes les collisions, on peut appliquer du code de résolution dont le but est de modifier la logique du jeu (marquer le personnage comme touché, ayant pris un bonus, …)
C'est ici qu'on appelle les primitives de rendu graphique en fonction de l'état du monde.
Intuitivement, le plus simple est de toute effacer et tout redessiner
On peut cependant, pour des questions de performances appliquer des techniques variées (superposition de couches graphiques évoluant a des fréquences distinctes par exemple)
Une fois la frame courante marquée comme dessinée, le système graphique fait le rendu à l'écran
Étant donné deux hitboxes (boites rectangulaires), on veut savoir si elles sont en intersection.
Si elles le sont, on veut appliquer un mecanisme de résolution
Sinon on ne fait rien
Au minimum, si deux boites sont en collision on peut :
C'est une approche qui fonctionne pour les jeux simples : Jeu de tir en scrolling horizontal, jeu de plateforme, casse brique, …
Pour des jeux plus complexe, il faut intégrer un moteur physique et calculer les rebonds éventuels des objets (voir TP) : jeu de catapulte (à la Angry Birds), jeu basé sur la physique, jeu de plateforme où l'on peut pousser et lancer des objets de façon complexe ou en empiler, …
Une technique courante est d'utiliser la soustraction de Minkowski (voir TP).