Développement du jeu vidéo Egg Hunter (partie 8)
- 30/10/2021 - Patrick Prémartin
Cette huitième session a largement dépassé la durée prévue et elle a été marquée par de nombreux problèmes techniques. Des violations d'accès qui ont été corrigées le lendemain mais sur lesquelles j'ai quand même passé beaucoup de temps à me prendre la tête alors que c'était juste une connerie qui traînait au niveau des sprites.
Le focus de la séance était essentiellement sur des optimisations afin de rendre le programme moins consommateur en CPU et plus rapide sur les affichages. Certaines de ces modifications ayant entrainé les plantages à répétition que nous avons eus.
Pour la rediffusion, ne trouvant pas forcément intéressant ces phases de réflexion et de lamentation j'ai fait quelques coupures et accéléré une partie de la vidéo.
Les autres sujets traités durant cette session de codage en direct sur Twitch dans le cadre du projet de jeu vidéo Egg Hunter ont été :
- Ajouter undo / redo aux actions possibles
- Récupération du SVG d'illustration pour ces deux nouveaux boutons
- Ajout des boutons undo/Redo (sans code derrière) à la barre d'outils de l'éditeur de niveaux
- Correction : ne pas retailler l'affichage du bitmap de la scene s'il déborde de la zone de l'écran (au cas où une colonne ou ligne serait trompée, ne pas stretcher l'affichage)
- Renommage des champs liés au bouton sprite sélectionné (pour plus de lisibilité du code)
- Optimisation de la récupération des sprites de la sprite sheet en stockant les TBitmap dans une liste en mémoire ce qui a clairement accéléré le fonctionnement de l'affichage et se répercute dans les temps de réponse de guedin obtenus dans le jeu.
- Correction : transparence sur affichage des sprites du décor.
La transparence n'était pas gérée au niveau de l'image par CopyFromBitmap(), ce qui est logique puisque c'est une copie par écrasement. Je suis donc passé par DrawBitmap() sur le TCanvas afin de conserver la transparence lors de l'affichage de chaque case du viewport à l'écran.
- Correction : déplacement haut / bas / gauche / droite depuis l'éditeur de niveau qui pouvait déborder de la grille de la map et soit ne rien faire, soit provoquer une anomalie.
- Ajout d'un booléen pour savoir si le dessin de l'écran a été modifié dans le buffer côté DMMap.
- Réinitialisation ce booléen dans le getSceneBuffer du DMMap
- Vérification si le buffer a été modifié dans le timer d'affichage au lieu de copier systématiquement l'image. Ce qui prend du CPU (et donc de l'énergie) pour rien. Là encore nous avons gagné en vitesse.
- Gestion des déplacements de la cartes avec les flèches du clavier (en "raccourci" par rapport aux boutons correspondants)
- Remplacement des RECORD des propriétés des éléments de la sprite sheet par des classes.
L'utilisation de RECORD rendait plus compliquée la modification des informations qui y étaient stockées à cause de leur fonctionnement par copie de zones mémoire lorsqu'on le faisait depuis la TList<>. L'utilisation de classes permet d'agir directement dessus et là encore de gagner un peu de CPU.
- Correction : modification des propriétés des éléments de la liste de sprites une fois que les RECORD ont été remplacés par des CLASS.
La vidéo sera mise en ligne dans quelques jours, le temps de faire le montage final.
Liens associés
Ces liens s'ouvrent dans la même fenêtre que cette page. En cliquant dessus vous quitterez Serial Streameur.
Pensez à les ouvrir dans un nouvel onglet si vous préférez rester ici pour y revenir plus facilement.
Mots-clés associés
Delphi, FireMonkey, FMX, Game Dev, Gamedev, Live coding