Le développement a ralenti cet automne. Je me suis retrouvé face à une phase de production intensive de contenu (Level Design) qui m'éloignait de ce que je préfère : la logique et l'architecture logicielle. Cette pause m'a permis de recharger les batteries pour aborder la suite du projet sous un angle plus technique.
Bug fantôme ?
Juste avant de m'arrêter, j'avais tenté de générer une version de démonstration du jeu, mais je m'étais heurté à un problème frustrant : un écran noir total.
Ma configuration matérielle (GeForce 4070 avec deux écrans 32 pouces) semblait causer un conflit.
Le moteur listait toutes les résolutions supportées par la carte graphique (allant jusqu’à 3840x2160), alors que mes moniteurs sont limités à du 1920x1080.
Le jeu tentait probablement de s'initialiser dans une résolution que mes écrans ne pouvaient pas afficher.
Étrangement, après deux mois sans toucher au projet, le bug a disparu de lui-même. Le jeu se lance désormais parfaitement.
Est-ce une mise à jour de Windows, des pilotes graphiques ou de Visual Studio qui a réglé le conflit ? Difficile à dire.
C'est l'un de ces "bugs fantômes" typiques du développement : on ne sait pas pourquoi il est arrivé, ni pourquoi il est parti, mais le projet est de nouveau fonctionnel et c'est ce qui compte pour la suite ! 😁
Ma petite fierté !
Je suis particulièrement fier de l'architecture mise en place pour les transitions entre les cartes.
J'ai réussi à concevoir un système où tout est géré de manière fluide sans avoir à retoucher au code à chaque nouvelle scène.
Tout repose sur la classe parent de toutes mes scènes (BaseLevelScene) et l'utilisation de propriétés dans Tiled :
- Dans la carte de départ, un objet de type Door avec les propriétés ToLocation (destination) et ToScene
- Dans la carte de destination, un objet de type Location pour le point d'arrivée
En intégrant cette logique à la classe de base, il me suffit de configurer les objets dans l'éditeur de cartes pour que le joueur soit positionné au bon endroit.
C'est un gain de temps énorme pour la suite du développement.
Voici un exemple d'une des portes présente dans le village :

Toutes les maisons auront au minimum les objets suivants :
- un objet VillageSpawn
- un objet Player
Le défi de la caméra (Work in progress)
Il reste cependant un point technique qui me donne du fil à retordre : la gestion de la caméra centrée sur le joueur, particulièrement près des bords de la carte.
Actuellement, le rendu commence au coin supérieur gauche. Si la caméra suit le joueur jusqu'au bord d'une petite carte, des zones noires apparaissent autour du décor.
C'est un défi classique de développement de jeu qui, malgré l'aide d'outils comme ChatGPT ou Gemini, demande une logique mathématique précise pour bloquer la caméra aux limites du niveau.
C'est un point sur lequel je continue de buter, mais c'est aussi ce genre de casse-tête qui rend la programmation intéressante.
Conclusion
Je reprends donc doucement le chemin du développement.
Mon objectif est de ne plus me laisser submerger par l'ampleur des tâches de design, mais de me concentrer sur le plaisir de résoudre ces défis techniques.
Le projet va évoluer à son rythme, sans pression.
L'important pour moi est de continuer à faire progresser les fondations de mon moteur et de voir mes idées prendre forme, une ligne de code à la fois.