Créer son jeu de Plateforme avec GameMaker 2 – Déplacements et Collisions

15

Salut à tous !

Le premier épisode de notre série de tuto « Créer son jeu de plateforme avec Game Maker Studio 2 » est enfin sorti.

Je dois avouer qu’il m’a pris beaucoup de temps à tourner, car j’ai essayer de simplifier au maximum mes explications afin qu’elles puissent être comprises par tous.

A ce propos n’hésitez pas à me dire dans les commentaires si tout à été clair ou s’il vous reste des questions 🙂

Vous pouvez dès à présent cliquer sur l’image pour être redirigé sur la vidéo, ou continuer de lire pour avoir plus de précisions sur les notions abordées 🙂

Partie 1 : Déplacements et Collisions

On voit donc dans ce premier tutorial la partie programmation qui nous permet de gérer les déplacements du personnage, ainsi que les collisions avec les murs.

Je sais que beaucoup prennent peur lorsqu’il s’agit de code, mais comme je l’ai dit plus haut j’ai fais en sorte que tout soit au maximum compréhensible. Regardez donc la vidéo jusqu’au bout, ça sera un bon moyen pour commencer à apprendre 🙂 Je vous rappelle que la programmation est le seul moyen de pouvoir être totalement libre dans la création de vos jeux. Avec du code vous pouvez TOUT faire !

On aborde donc dans cette vidéo plusieurs aspects du Game Maker Langage, tels que les variables, les fonctions ou encore les conditions if et while.

Ce qu’il faut retenir de tout ceci :

  • Une variable est une donnée (une information) possédant un nom et correspondant à une valeur.

Par exemple : var move (notre variable possédant le nom move) = press_right – press_left;

On aurait très bien pu également lui assigner la valeur 4 ! La variable walkspd par exemple, est égale à 4 dans notre vidéo. Tout dépend de ce que vous comptez faire de votre variable par la suite.

  • Lorsque l’on termine d’écrire une ligne de code, celle-ci doit se fermer avec le symbole  » ; « , à l’exception des conditions if et while.

Par exemple : hspd = 0;

  • L’instruction if permet d’introduire une condition, et s’écrit toujours de la manière suivant avec les opérateurs : if (notre condition) { ce qu’il faut faire si la condition est vraie}

Par exemple : Si –> if (place_meeting(x,y,oMur)) ALORS IL FAUT –> { hspd = 0; }

  • L’instruction while fonctionne de la même manière, mais signifie quant à elle « Tant que… »

Par exemple : Tant que l’objet Mur ne touche pas le joueur : while (place_meeting(x,y,oMur)) { }

  • La fonction « place_meeting (x,y, objet à vérifier) » permet de vérifier si un objet entre en collision avec un autre.
  • L’axe verticale est inversé dans Game Maker

Axe vertical inversé Game Maker

C’est tout pour ce premier tuto, j’espère vraiment qu’il vous plaira et qu’il vous apprendra des choses.

N’oubliez pas d’aller vous abonner à la chaîne Youtube c’est le meilleur soutient que vous puissiez me faire 🙂

A bientôt pour la suite !

Partage cet article

15 commentaires

    • Tout à fait ! Le while est simplement là pour gérer la collision au pixel près, mais c’est effectivement du détail 😉 Je l’ai ajouté ici car cela peut être utile dans certaines situations ou des jeux plus complexes, alors je me suis dis autant le montrer tout de suite 🙂

  1. Quand je lance le jeu sa me donne

    ________________________________________
    ############################################################################################
    FATAL ERROR in
    action number 1
    of Step Event0
    for object oPlayer:

    Variable oPlayer.walhspd(100009, -2147483648) not set before reading it.
    at gml_Object_oPlayer_Step_0 (line 11) – hspd = move * walhspd;
    ############################################################################################
    ——————————————————————————————–
    stack frame is
    gml_Object_oPlayer_Step_0 (line 11)

  2. salut j’ai un petit problème quand je lance sur gamemaker 2 mon jeu il affiche juste un écran noir et c tout comment faire pour palier a ça

    • Hello Jérémie ! Cela doit être dû au fait que tu n’as pas activé ton viewport. Lorsque tu es dans ton éditeur de room, il faut que tu coche la case « enable viewports » dans l’onglet en bas à droite « Properties – Room ». Il te suffit ensuite de sélectionner un viewport, le premier par exemple « viewport 0 », et de cocher la case « visible ». En espérant que cela t’aide 😉

  3. hey quand je lance le programme le « cube » ce pose sur le sole normalement puis se teleporte sous le sole et y reste attacher sans tomber

  4. Amina BENDADA on

    Hello, j’espere que ça va ,
    j’ai essayé ton tuto,
    et j’ai un petit soucis, si vous pouvez m’aider,

    Quand j’appuis sur Espace , le carré ( player ) ne saute pas , j’ai essayé de changer
    press_right = keyboard_check(vk_right);
    press_left = keyboard_check(vk_left);
    press_jump = keyboard_check(vk_space); (j’ai enlevé le mot pressed ) et cela persiste

    merci infiniment pour votre tuto

  5. Salut j’aimerais savoir pourquoi lorsque je tape walkspd pu encore hspd cela me met un panneau attention ⚠ avec écrit « variable représenter une seule fois » merci d’avance

    • C’est juste qu’il détecte que tu as déclarer une variable, mais tu ne l’utilise nul part.
      Donc il fait un warning, tu verras que quand tu l’utiliseras dans « Step » par exemple, tu n’auras plus cette erreur.

  6. Gameuse Nouvelle Génération on

    Bonjour,
    J’ai suivi les instructions à la lettre mais mon joueur s’enfonce dans le mur au moment d’atterrir et on ne peut plus le bouger. Voici le programme:

    // Attributs du personnage

    hspd = 0;
    vspd = 0;
    grav = 0.5;
    walkspd = 4;

    // Contrôle du personnage (récupération des touches du clavier)

    press_right = keyboard_check(vk_right);
    press_left = keyboard_check(vk_left);
    press_jump = keyboard_check_pressed(vk_space);

    // Mouvements du personnage

    var move = press_right – press_left;
    hspd = move * walkspd;
    vspd = vspd + grav;

    if (place_meeting(x, y + 1, oMur)) && (press_jump)
    {
    vspd = -5;
    }

    // Collisions horizontales

    if (place_meeting(x + hspd, y, oMur))
    {
    while (!place_meeting(x + sign(hspd), y, oMur))
    {
    x = x + sign(hspd)
    }
    hspd = 0;
    }

    x = x + hspd;

    // Collisions verticales

    if (place_meeting(x + vspd, y, oMur))
    {
    while (!place_meeting(x, y + sign(vspd), oMur))
    {
    y = y + sign(vspd)
    }
    vspd = 0;
    }

    y = y + vspd;

    • Salut. J’espère que tu a trouvé ton problème depuis… Mais dans le doute :
      Relis bien ton code j’ai vu au moins deux lignes ou il manque un ; à la fin. Ça ça ne pardonne pas.

      De plus tu a un caractère spéciale sur la ligne suivante v
      var move = press_right – press_left;
      Le moins n’est pas le bon caractère ce n’est pas le moins que gamemaker peut lire.
      Il faut que tu mette un moins en appuyant sur la touche 6.

  7. Bonjour merci beaucoup pour ton excellent Tuto.

    Juste une petite question pour mieux comprendre :
    Pourquoi créé tu t’es propres variables pour la direction ? Comme hspd et vspd par exemple ?

    Parce que j’ai vu que Gamemaker possède déjà des variables hspeed et vspeed. Qu’est-ce que cela change ?

    Merci par avance. Et Bonne continuation.

Laisser un commentaire