Correctif: Résoudre les problèmes de collision de plateformes

Note : Cet article est une archive technique traitant d’une solution spécifique aux problèmes de collision irrégulière dans Construct 2.

Le problème : Plateformes et formes complexes#

Dans Construct 2, la gestion des collisions sur des plateformes possédant des trous, des pentes ou des arrondis peut provoquer des erreurs de calcul. Le moteur a parfois du mal à gérer physiquement le personnage sur ces surfaces, entraînant des traversées accidentelles ou des bugs de positionnement.

5. Munitions, Rechargement et HUD Statique

Dans ce cinquième épisode de notre série sur Construct 2, nous allons approfondir la gestion de l’interface utilisateur et des mécaniques de jeu essentielles, en nous concentrant sur les munitions et le rechargement.

Résumé des notions clés abordées :#

  • Gestion du HUD Statique avec Parallax (0,0)
    • Apprentissage de la propriété Parallax pour les calques (Layers) dans Construct 2.
    • Configuration du calque HUD (Heads-Up Display) avec une valeur de parallax de 0,0 pour s’assurer que les éléments d’interface (vie, munitions) restent fixes à l’écran, indépendamment du défilement de la caméra.
  • Affichage des Munitions
    • Création d’un objet Text sur le calque HUD pour afficher le nombre de munitions restantes.
    • Personnalisation du texte (police, taille, couleur, position).
  • Variables d’Instance pour les Munitions
    • Pour le Joueur (Marine) :
      • MaxMun : Variable d’instance pour définir la capacité maximale de munitions que le joueur peut porter (ex: 6 pour un revolver).
      • Munition : Variable d’instance pour suivre le nombre actuel de munitions du joueur.
    • Pour les Chargeurs (Charger) :
      • Charge : Variable d’instance pour définir la quantité de munitions qu’un chargeur (pickup) fournit.
  • Initialisation des Munitions au Démarrage du Niveau
    • Utilisation de l’événement système On Start Of Layout pour initialiser la variable Munition du joueur à la valeur de MaxMun. Cela assure que le joueur commence chaque niveau avec un chargeur plein.
  • Mise à Jour de l’Affichage des Munitions
    • Dans l’événement système Every Tick (à chaque image du jeu), mise à jour de l’objet Text des munitions pour qu’il affiche la valeur actuelle de la variable Munition du joueur.
  • Mécanique de Tir et Consommation de Munitions
    • Modification de l’événement Mouse - On Left Button Clicked (lorsque le joueur tire).
    • Condition : Ajout d’une condition Marine.Munition > 0 pour s’assurer que le joueur ne peut tirer que s’il a des munitions.
    • Action : Soustraire 1 à la variable Munition du joueur après chaque tir.
  • Ramassage des Chargeurs (Pickups)
    • Création d’un objet Sprite pour représenter un chargeur de munitions sur le sol.
    • Événement : Marine - Is Overlapping another object (Charger) (lorsque le joueur entre en collision avec un chargeur).
    • Condition Cruciale : Ajout d’une condition pour éviter de recharger au-delà de la capacité maximale : Marine.MaxMun >= Marine.Munition + Charger.Charge. Cela vérifie si l’ajout des munitions du chargeur ne dépasse pas la capacité maximale du joueur.
    • Actions :
      • Ajouter la valeur de Charger.Charge à la variable Munition du joueur.
      • Détruire l’objet Charger pour le faire disparaître du niveau.

Ce qui reste d’actualité aujourd’hui#

Bien que ce tutoriel utilise Construct 2, les concepts abordés sont des piliers fondamentaux du développement de jeux vidéo et restent entièrement pertinents, quel que soit le moteur ou le langage utilisé :

5. Création d'un ennemi dynamique et aménagement de niveau

Note : Cet article est une archive pédagogique du cinquième épisode de ma série sur la création d’un jeu de plateforme avec Construct 2.

Points clés abordés#

  • Amélioration du Level Design : Conseils pour rendre vos niveaux plus visuels et attrayants en modifiant la disposition des éléments de décor.
  • IA d’ennemi basique : * Mise en place d’un ennemi qui se déplace automatiquement de gauche à droite.
    • Utilisation de la logique de retournement automatique pour simuler une patrouille.
  • Organisation du code : * Introduction aux Groupes d’événements : création d’un groupe dédié (AnimJackEnemy) pour isoler la logique de l’ennemi.
    • Activation/Désactivation des groupes au démarrage pour optimiser la lisibilité et la maintenance du projet.
  • Gestion des bugs de collision : Identification et résolution de problèmes liés aux chutes non désirées à travers les plateformes (complémentaire au tutoriel de debug).

Conseils d’organisation pour vos feuilles d’événements#

À mesure que votre projet gagne en complexité, la structure de votre feuille d’événements devient cruciale :

6. Gérer la Vie, Créer un Menu et Optimiser son Jeu

Dans ce sixième épisode de notre série dédiée à Construct 2, nous allons approfondir la gestion des packs de vie, structurer notre jeu avec un menu d’accueil et peaufiner les performances et l’organisation de notre projet.

Résumé des notions clés#

  • Gestion des Packs de Vie (Health Packs)
    • Création du sprite “Elpack” (Health Pack) et ajout d’une variable d’instance pv (points de vie) pour définir la quantité de soin.
    • Ajout d’une variable d’instance MaxV (vie maximale) au joueur pour définir sa capacité de vie maximale.
    • Initialisation de la vie du joueur à MaxV au démarrage du layout pour garantir une vie pleine au début.
    • Implémentation de deux logiques de ramassage pour les packs de vie :
      • Ajout des pv du pack à la vie du joueur si cela ne dépasse pas MaxV.
      • Réinitialisation de la vie du joueur à MaxV si le ramassage du pack le ferait dépasser, évitant ainsi de soigner au-delà du maximum.
  • Création d’un Menu Principal
    • Ajout d’un nouveau layout “Menu” et d’une feuille d’événements dédiée “ES_Menu” pour gérer la logique du menu.
    • Intégration d’un bouton “Jouer” sur le menu qui, une fois cliqué, redirige le joueur vers le “Level 1” (le jeu).
    • Modification de l’événement de mort du joueur pour qu’il revienne au menu principal plutôt que de simplement disparaître.
  • Optimisation et Améliorations du Jeu
    • Nettoyage des balles: Ajout d’un événement pour détruire automatiquement les balles qui sortent du layout, économisant ainsi des ressources.
    • Point de sortie du tir: Création d’un “Image Point” nommé “gun” sur le sprite du joueur, permettant aux balles de partir de l’extrémité de l’arme pour un rendu plus réaliste.
    • Organisation du code: Utilisation de groupes d’événements (“System”, “Marine”, “Balles”) pour structurer et rendre plus lisible la feuille d’événements.
    • Exportation du jeu: Explication du processus d’exportation du projet en “HTML5 Website” et des étapes pour le déployer sur un hébergement web.
  • Devoir Maison
    • Appliquer la logique de “vie maximale” aux munitions : faire en sorte que ramasser un chargeur ne permette pas de dépasser la capacité maximale du chargeur du joueur.

Ce qui reste d’actualité aujourd’hui#

Bien que Construct 2 ait évolué vers Construct 3, les principes fondamentaux abordés dans ce tutoriel restent des piliers du développement de jeux vidéo et sont applicables à la plupart des moteurs de jeu modernes :

6. Gestion des collisions, HUD et interface

Note : Cet article est une archive pédagogique du sixième épisode de ma série sur la création d’un jeu de plateforme avec Construct 2.

Programme de l’épisode#

  • Gestion avancée des collisions : Distinguer l’interaction “saut sur l’ennemi” (destruction) de l’interaction “contact latéral” (perte de vie/redémarrage).
  • Interface (HUD) : Création d’une interface fixe pour afficher la vie (cœurs) et le score.
  • Optimisation UI : Utilisation du comportement Anchor pour maintenir l’interface à l’écran pendant le défilement.
  • Ajout d’objets : Intégration de pièces à collecter.

Logique des collisions (Feuille d’événement)#

Pour gérer la différence entre écraser un ennemi et se faire toucher, on utilise des sous-événements basés sur l’état vertical du joueur :

Correctif: Animation de marche persistante à l'atterrissage

Note : Cet article traite d’un correctif rapide (hors-série) concernant un bug d’animation où le personnage conservait l’animation “marche” après l’atterrissage si la touche de direction était relâchée juste avant le contact avec le sol.

Le Problème#

Lorsqu’un joueur saute et relâche la touche directionnelle (gauche ou droite) avant d’atterrir, l’animation de marche restait bloquée en boucle jusqu’à ce qu’une nouvelle action soit entreprise.

7. Système de vie et gestion des scores

Note : Cet article est une archive pédagogique du septième épisode de ma série sur la création d’un jeu de plateforme avec Construct 2.

Points clés abordés#

  • Variables globales : Utilisation de variables pour suivre l’état du joueur (Score et Vie).
  • Gestion des pièces : * Détection de collision entre le joueur et l’objet Pièce.
    • Destruction de la pièce après contact.
    • Incrémentation de la variable globale Score et mise à jour de l’affichage textuel (HUD).
  • IA d’ennemi et dégâts :
    • Système de “double collision” : saut sur l’ennemi (destruction) vs contact latéral (perte de vie).
    • Soustraction d’une valeur à la variable Vie lors d’un contact non létal.
  • Condition de défaite (Game Over) : Vérification de la valeur de la variable Vie après chaque impact. Si Vie <= 0, déclenchement de l’action Restart Layout.

Logique des variables dans Construct 2#

La gestion des données est au cœur de cet épisode. Voici la structure logique recommandée pour vos événements :

Patch : Mise à jour du système WebStorage

Note : Cet article est une archive corrective visant à mettre à jour la méthode de persistance des données (WebStorage), suite à des changements dans les versions de Construct 2.

Pourquoi ce patch ?#

Dans les versions initiales de Construct 2 (il y a plusieurs années), l’utilisation de l’objet WebStorage était la méthode standard pour conserver des données comme le score ou le nom d’utilisateur entre deux layouts. Ce tutoriel patch explique comment adapter cette logique pour assurer la compatibilité avec les versions plus récentes du moteur.

9. Système de codes de niveau

Note : Cet article est une archive pédagogique du neuvième épisode de ma série sur la création d’un jeu de plateforme avec Construct 2.

Points clés abordés#

  • Saisie utilisateur : Insertion d’un objet TextBox sur le calque HUD du menu pour permettre au joueur de taper un code.
  • Gestion des données avec le Dictionary : Utilisation de l’objet Dictionary pour associer une clé (le code saisi) à une valeur (le nom du Layout/niveau correspondant).
  • Navigation dynamique : Mise en place d’une logique conditionnelle pour le bouton “Jouer” :
    • Si le champ est vide : Chargement du niveau par défaut.
    • Si un code est saisi : Chargement du niveau associé via l’action Go to layout by name.
  • Récupération de valeur : Utilisation de l’expression Dictionary.Get(tbcode.Text) pour automatiser le basculement vers le bon niveau.

Configuration technique du Dictionary#

Pour que le système fonctionne, la déclaration des codes doit se faire dès le lancement du menu :