On a parlé avec Donut_prod de ces histoires de performance, mais je ne retrouve pas de sujet probants.
Souvent le goulot d’étranglement des performances provient de conditions réalisées sur un grand nombre d’objets.
Imaginons que je teste la collision entre 10 Personnages et 50 Décors en faisant cette condition :
Personnage est en collision avec Décors
Cette condition implique de tester la collision 10*50 = 500 fois.
Que faire alors ? Une des premières solutions est de s’assurer d’utiliser des conditions comme celle de collision le moins possible. Plutôt que de faire :
Personnage est en collision avec Décors
La variable Chute de Personnage est = à 1
Faites :
La variable Chute de Personnage est = à 1
Personnage est en collision avec Décors
( La première condition testera par exemple les 10 objets personnage, et si elle n’en retient que 2, il n’y aura plus que 2*50 = 100 test de collision à faire )
Dans le même état d’esprit, éviter de répéter les conditions comme ceci :
Condition : La variable Chute de Personnage est = à 1
Action : Faire ceci
Condition : La variable Chute de Personnage est = à 1 et La variable Vie de Personnage est = à 0
Action : Faire cela
En les regroupant par exemple en sous évènements :
Condition : La variable Chute de Personnage est = à 1
Action : Faire ceci
Sous évènement : Condition : La variable Vie de Personnage est = à 0
--------------------Action : Faire cela
Au niveau des actions, autant éviter de même de répéter des actions si possible. Plutôt que de faire :
Condition : Pas de conditions
Action : Mettre la couleur globale de MonObjet à 128;50;128
faites :
Condition : Au lancement de la scène ( ou alors juste après la création de l’objet )
Action : Mettre la couleur globale de MonObjet à 128;50;128
Les forces peuvent s’avérer gourmandes, surtout quand la dissipation n’est pas égale à 0, car elles sont à l’instar des conditions modifiées à chaque tour de boucle pour chaque objet qui la possède.
Dernière solution, réduire le nombre d’objets. Cela peut être par exemple rassembler plusieurs décors en un seul, ou supprimer des objets qui servent à faire des effets de particule par exemple.
3000 objets, c’est quand même assez conséquent. J’ai cru comprendre qu’ils ne bougeaient pas, les problèmes viendraient plutôt des conditions apparemment.
A titre d’exemple, dans mon jeu Eternity Under Fire, qui commence à ramer assez vite quand il y a beaucoup de particules de sang, j’ai pu corriger le problème en faisant ceci : Une fois que le sang est tombé par terre, plutôt que de l’arrêter et de le laisser, je le détruit et créé un objet “Sang statique” à la place. Vu qu’il n’y a aucune conditions ni actions en relation avec cet objet, ( alors que pour le sang normal, il y a des tests pour vérifier sa hauteur ), les performance sont énormément améliorée : Il peut y avoir beaucoup de sang par terre, ça ne changera pas grand chose : Seul le sang en l’air est couteux pour les performances, et il n’y en a jamais trop.