Florida 1865 - juillet 2024 - Amélioration de la vitesse du jeu sous Gdevelop
Aujourd'hui je travaille a réduire le lag ou pour le dire autrement améliorer la vitesse du jeu.
Je suis en train de travailler sur le jeu Florida 1865 et je veux montrer que les populations qui était sous esclavage une fois libéré, vont chercher à trouver des terres vides. Cela veut dire faire bouger à l'écran des centaines d'éléments en meme temps.
En effet il y a plus de 600 éléments à l'écran qui interagissent en même temps et il faut trouver la bonne dynamique pour garder un gameplay agréable.
Actuellement je suis à 362 ms par image et je vise 100 u 150 ms (millisecondes) par images
Etape 1 Reduction du nombre de chronomètre pour le menu securite et l'affichage des couleurs
je tente de réduire le nombre de chronomètre qui tourne en simultané (plus de 500 tout de même) pour les remplacer par quelqu'uns. En effet, chaque objet du jeu a un chronomètre et cela prend beaucoup de puissance de calcul.
Chaque zone qui réalise une carte de couleur a un chronomètre, on décide de réduire à un seul qui fait le calcul pour chaque zone.
voici le résultat que je dois garder, le niveau de sécurité qui varie en fonction de la présence de soldats ennemis
Et donc ca marche avec les nouvelles règles avec un seul chronomètre ☺️.
Cela m'a permit e passer a 343 ms soit un gain de 19 ms, on continue. #Les petites gouttes d'eau font les grandes rivières.
2. Reduction du nombre de chronomètre chez les travailleurs blancs pour se distancer.
Travailleurs blanc c'est une catégorie sociale et un des types d'unités.
Il y en a plus de 500 sur la carte, c'est nécessaire pour créer une dynamique sociale.
Je prend un chronomètre au ieu de 500 et j'obtiens une baisse à 219 ms 😱.
Ici la règle est que les travailleurs soient à un certain nombre de pixels les uns des autres.
3. Reduction du nombre de chronomètre pour l'exode rural des travailleurs blancs.
Mais là méthode de réduction des chronomètres ne marche pas toujours.
Ici le code avec des chronometre d'objet fonctionne mieux qu'un seul chronometre
ce code ci 230 ms
ce code la 340 ms
Au final j'arrive a 257 ms avec ce resultat quand je reduis le nombre d'opérations
4. Reduction du nombre de chronomètre pour la carte sécurité
On part à 352 ms sans aucune règle (juste les valeurs monte)
Avec les nouvelles règles
Je passe à 261 MS.
Version à tester
https://gd.games/instant-builds/06d3f88d-73e0-408b-b099-6f0a35e7a741
Version public
https://gd.games/antmdh/reconstruction-1865
5. Je cherche encore a travailler la vitesse du jeu
je suis a 239 ms
sans la règle de distance des travailleurs blanc je sis a 166 il y a donc 100ms a gagner
ca marche je suis arrivé a 195 ms meme si le probleme c'est qu'il parte tous dans la mer ;-)
J'essaye maintenant d'ajouter les memes règles pour els travailleurs noir mais j'arrive à 3000 ms
Je regarde regle par regle
1ere regle 169 ms
2e regle
avec la règle suivante on passe à 185 mais j'essaye de réduire
ici j'augmente à 195 (pas vraiment le but)
et l'a je redescend à 168, il semble que le fait d'impliquer un choronometre pour lui demander de regarder tout les 6 secondes augmente le lag au lieu de le diminuer
3e regle 188 ms
6. On est toujours dans l'amélioration de la vitesse
1. regles qui fait tous planter population noir
Sans la derniere regle 199 ms
j'ai repéré le bug et maitenant je suis a 248 ms
7. Je réorganise mes règles
Je réorganise les pages et voici mon plan actuel
J'observe qu'il manque la dynamique d'exode rural pour la population noir mais cela n'améliore pas la vitesse
8. Je regarde si la vitesse en local est plus rapide que la vitesse sur la version online
J'ai exporté ma version en APK mais cela ne va pas plus vite que la version testé en ligne ou sur mon ordinateur. (L'animation de troupe sélectionné dure jusqu'à 5 secondes au lieu de une )
Je dois encore réduire la vitesse
9. Je fais un test pour comparer si un chrono ou 500 chrono influence fortement la vitesse
1er cas une image qui change chaque seconde, le chrono est dans la valeur
= 1,49 ms
2e cas, 500 image qui change chaque seconde, le chrono est dans la valeur
= 3,23 ms
3e cas, 500 image qui change chaque seconde, un seul chrono
= 3,72 ms
=> 1ere conclusion, le nombre de chronometre ne varie pas, mais la méthode d'écriture oui
Faisons plus complexe
500 images qui bouge dans des sens differents et 500 chronometre
=5,2 ms
v500 images qui bouge dans des sens differents et 1 chronometre
=4,71 ms
Conclusion oui le nombre de chronomètre a une incidence dans la vitesse pour Gdevelop
Code ci dessous
{"000kind":"GDEVELOP_EventsAndInstructions_CLIPBOARD_KIND-jsBdHbLy912y8Rc","content":{"eventsList":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"methode 1 - 500 chronometre"},{"type":"BuiltinCommonInstructions::ForEach","object":"pastille","conditions":[{"type":{"value":"DepartScene"},"parameters":[""]}],"actions":[{"type":{"value":"ResetObjectTimer"},"parameters":["pastille","\"chronopastille\""]}]},{"type":"BuiltinCommonInstructions::ForEach","object":"pastille","conditions":[{"type":{"value":"CompareObjectTimer"},"parameters":["pastille","\"chronopastille\"",">=","1"]}],"actions":[{"type":{"value":"ResetObjectTimer"},"parameters":["pastille","\"chronopastille\""]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["pastille","chiffre","=","RandomInRange(0,9)"]}]}],"eventsCount":3,"actionsList":[],"actionsCount":0,"conditionsList":[],"conditionsCount":0}}
{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Methode 3 - 500 chronometre et pastille qui bouge"},{"disabled":true,"type":"BuiltinCommonInstructions::ForEach","object":"pastille","conditions":[{"type":{"value":"DepartScene"},"parameters":[""]}],"actions":[{"type":{"value":"ResetObjectTimer"},"parameters":["pastille","\"chronopastille\""]}]},{"type":"BuiltinCommonInstructions::ForEach","object":"pastille","conditions":[{"type":{"value":"CompareObjectTimer"},"parameters":["pastille","\"chronopastille\"",">=","1"]}],"actions":[{"type":{"value":"SetNumberObjectVariable"},"parameters":["pastille","chiffre","=","RandomInRange(0,9)"]}],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"AddForceVersPos"},"parameters":["pastille","pastille.CenterX()+pastille.chiffre","pastille.CenterY()+pastille.chiffre","10","1"]},{"type":{"value":"ResetObjectTimer"},"parameters":["pastille","\"chronopastille\""]}]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"AddForceVersPos"},"parameters":["pastille","pastille.CenterX()+pastille.chiffre","pastille.CenterY()+pastille.chiffre","10","1"]},{"type":{"value":"ResetObjectTimer"},"parameters":["pastille","\"chronopastille\""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"AnimatableCapability::AnimatableBehavior::SetIndex"},"parameters":["pastille","Animation","=","pastille.chiffre"]}]},
{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"methode 4 - 1 chronometre et 500 pastilles qiu bouge"},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"DepartScene"},"parameters":[""]}],"actions":[{"type":{"value":"ResetTimer"},"parameters":["","\"chronodescene\""]}]},{"type":"BuiltinCommonInstructions::ForEach","object":"pastille","conditions":[{"type":{"value":"CompareTimer"},"parameters":["","\"chronodescene\"",">=","1"]}],"actions":[{"type":{"value":"SetNumberObjectVariable"},"parameters":["pastille","chiffre","=","RandomInRange(0,9)"]},{"type":{"value":"AddForceVersPos"},"parameters":["pastille","pastille.CenterX()+pastille.chiffre","pastille.CenterY()+pastille.chiffre","10","1"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"CompareTimer"},"parameters":["","\"chronodescene\"",">=","1"]}],"actions":[{"type":{"value":"ResetTimer"},"parameters":["","\"chronodescene\""]},{"type":{"value":"AnimatableCapability::AnimatableBehavior::SetIndex"},"parameters":["pastille","Animation","=","pastille.chiffre"]}]}],"eventsCount":13,"actionsList":[],"actionsCount":0,"conditionsList":[],"conditionsCount":0}}
10. Je travaille avec un seul type d'objet
Comme je suis capable de faire changer de sens 500 elements avec 3 ms, je dois etre capable de faire la meme chose ici, je remplace mes items par un seul items civil avec plusieurs animations (noir, blanc, aristocrate, indiens) au lieu de 4 ou 5 items differénts (travailleurs noirs, travailleurs, blanc, etc.)
Ma vitesse si je suis sans aucune règle de dynamique de population
= 12,87 ms
4.1 avec les regles qui donne les infos de debut
17 ms
Après le code, cela fonctionne super bien pour la mise en position des civils, il sont répartis dès la premiere secondes de jeu
et la vitesse est à 15,89 ms mais une fois les troupes installé
11. Je travail avec une structure mouvement instantané et calcul de valeur continue
Je travail avec une règle
En tache de fond, de manière continue, les valeurs sont calculés en arrière plan
Par contre le mouvement de manière instanté pendant 3 secondes et j'introduit une dynamique aléatoire qui choisit un item par frame pour le faire bouger
Voici le résultat
Et je suis à 87 ms
Voici mon code
Résultat final
Commentaires
Enregistrer un commentaire