[TUTO] Créer un jeu avec GameMaker

Pour tout ce qui est fan arts, homebrew, shooters codés à la main, rip de sprites, doujins et toute autre productions artistiques ou logicielles faites maison.
Karmer
Jeune Pad-awan
Messages : 40
Inscription : 23 nov. 2013, 01:10

Merci de rejoindre le fil et de me donner un coup de main =).
Je garde ce décodeur sous la main je pense qu'il me sera bien utile.
Je viens de rentrer un peu dans le GML avec le lien du tuto en anglais. C'est génial et fascinant ! Pour l'instant je galère pas trop...
Par contre j'ai des questions sur certains morceaux de code, j’essaie de poster ça demain. bye
Gunny
Empereur Bydo
Messages : 3404
Inscription : 15 mai 2006, 15:26
Localisation : Rayon chaussettes du Kiabi du coin
Contact :

Vu que tu débutes en programmation de manière générale, j'aurais quelques questions à te poser...

Est-ce que tu peux m'expliquer ce qu'est une variable ?
Que signifie initialiser une variable ?
Que signifie le verbe affecter ?

Si tu ne sais répondre à aucune de ces réponses, pas d'inquiètude, je te fais un petit court sur les variables et leur utilisation. Faut juste que tu me dises si tu sais ou pas ^^
Si t'as un truc électronique cassé, ça se passe par là https://www.atelier-electrodd.fr/

-Je comprend rien à ce que tu dis...
-Pas grave... C'est pas en vivant plus longtemps qu'on deviens moins con.
Karmer
Jeune Pad-awan
Messages : 40
Inscription : 23 nov. 2013, 01:10

aaah ! j'adore les questionnaires et surtout la correction qui vient après !

°Je pense avoir globalement saisi ce qu'est une variable mais je ne pourrai pas en donner une bonne définition je pense.
Je dirai que c'est une manière de définir un objet. Par exemple : pour ce personnage contrôlé par le joueur (objet ou instance) : HP = 1
° Initialiser une variable, ça par contre je ne saurais pas le dire, peut-être que c'est tout simplement le fait de faire appel a une variable déjà définie, ou d'en créer une ...
°Affecter, ce serait le fait d'attacher une valeur a cette variable.. dans le cas de l'exemple "HP = 1", 1 serait la valeur affectée à la variable nommée "HP"

Bon j'espère que c'est pas trop mauvais, mais globalement je dirais que je ne sais pas ou alors de manière approximative, donc je ne dirais pas non a un petit tuto :binouze:
Gunny
Empereur Bydo
Messages : 3404
Inscription : 15 mai 2006, 15:26
Localisation : Rayon chaussettes du Kiabi du coin
Contact :

Une variable, c'est tout bêtement un conteneur, un peu comme un tiroir.
En général, on met des valeurs numériques dedans.
Ce conteneur représente un emplacement dans la mémoire de l'ordi.

Il faut savoir qu'il y a plusieurs types de "longueurs" pour une variable. Ca va changer la place que prend cette variable en mémoire.

La plus petite que je connaisse, elle est de type dit booléen ( tiré de l'algèbre de bool ). C'est un nom compliqué pour dire que la variable ne peut contenir QUE les valeurs 0 ou 1. Pas de nombre négatif, ou a virgule, juste 0 ou 1.
On se sert de ce type de variable pour savoir ou indiquer si quelque chose est vrai ou faux ( concept plus facile à comprendre avec les conditions ), vrai pour 1 et 0 pour faux.

Après, on a plusieurs types de longueurs, et précision. Suivant que l'on veut stocker en mémoire des nombres à virgules ou non, qui changent de signe ou non.

On peut aussi stocker une lettre.

Il a des variables un peu particulières appelées tableaux. On s'en sert généralement pour stocker "au même endroit" des données. L'avantage du tableau, c'est qu'au lieu de stocker une seule donnée, il peut en stocker un très grand nombre ! Et donc, c'est ce qui permet de stocker non plus une lettre, mais des mots ou phrases par exemple.
Un tableau se présente sous cette forme :

nom_tableau[x];

avec x représentant un nombre.

Gamemaker, il simplifie la gestion des variables pour l'apprenti développeur, tu n'as pas vraiment à savoir quel type de variable utiliser pour stocker tel type de donnée. Gamemaker va automatiquement adapter au moment de l'initialisation.

Qu'est-ce que l'initialisation ?
Il faut savoir qu'au moment où l'on créé une variable ( appelée instanciation mais on y reviendra plus tard sur ce terme ), il est IMPOSSIBLE de savoir où va être l'espace réservé pour cette variable dans la mémoire. D'un point de vu physique, il y a toujours des résidus des anciennes données. Donc il faut considérer une variable nouvellement créée comme possédant un contenu totalement aléatoire. Nous allons donc initialiser la variable. C'est à dire lui donner une valeur initiale. Pour les valeur chiffrées, on met généralement 0 et on change plus tard.

Tu risques d'utiliser aussi ce qu'on appelle des constantes. C'est un type de variable dont le contenu ne peut plus bouger une fois initialisée.

L'affectation, c'est le fait de donner une nouvelle valeur à la variable. On passe par le signe "=".

Voilà pour quelques principes de base ;)
Si t'as un truc électronique cassé, ça se passe par là https://www.atelier-electrodd.fr/

-Je comprend rien à ce que tu dis...
-Pas grave... C'est pas en vivant plus longtemps qu'on deviens moins con.
Karmer
Jeune Pad-awan
Messages : 40
Inscription : 23 nov. 2013, 01:10

J'trouve ça vraiment fascinant, ça m'a toujours vraiment impressionné le langage informatique.
Merci pour ces bases, ça fait plaiz Je me fais un petit copié/collé dans mon dossier :))

Il y a juste cette phrase que je n'arrive pas totalement a saisir : "Donc il faut considérer une variable nouvellement créée comme possédant un contenu totalement aléatoire" ça veut dire que d'un point de vue physique cette variable va prendre comme valeur un résidu déjà dans la mémoire tant que je ne lui donne pas une valeur? et aussi cette phrase qui suit :
"Pour les valeur chiffrées, on met généralement 0 et on change plus tard."


J'ai aussi une question, sur Gm, j'ai l'impression que le sprite de mon vaisseau est déformé pas de beaucoup, mais certains pixels sont par exemple plus grand que d'autres. J'ai essayé en bidouillant le game setting et j'ai rien trouvé à part avec "Interpolate colors between pixels" ca fontionne, mais ça donne un rendu flou assez dégue. Aurais tu une idée de ce que je pourrais faire ?
Dernière modification par Karmer le 24 nov. 2013, 15:45, modifié 1 fois.
Karmer
Jeune Pad-awan
Messages : 40
Inscription : 23 nov. 2013, 01:10

Dans le tuto que je suis, il y'a cette ligne de code qui s'execute quand l'ennemi de 1 pv reçoit un dgt de 1 pv, donc s'ensuit la destruction :

if (hp < 1)
{
instance_create(other.x, other.y, oExplosion);
instance_destroy();
}


ma question se porte sur "other.x" et "other.y" ils sont censés faire apparaitre l'instance oExplosion grâce aux coordonnées X/Y mais il n'ont pas de valeur, du coup, même si tout se passe bien dans le jeu je ne comprends pas comment GM fait apparaitre l'instance de l'explosion puisque X/Y n'ont pas de valeur. Ils correspondent à other, autrement dit au "shot" du vaisseau que le joueur tire, est-ce que ça veut dire que ces valeurs X/Y sont celles du "shot" avant qu'il ne disparaisse ?

pas facile de sembler être clair :X
Gunny
Empereur Bydo
Messages : 3404
Inscription : 15 mai 2006, 15:26
Localisation : Rayon chaussettes du Kiabi du coin
Contact :

Le bout de code que tu cites, contient des notions de programmation orienté objet.
Pour le moment, t'es loin de pouvoir appréhender ces concepts pour le moment. C'est pas très compliqué cela dit.

En ce qui concerne tes problèmes.

Alors quand on créé une variable, on réserve un espace mémoire dans les barrettes de ram. Quand on en a plus besoin, on supprime la réservation mais pas les données.

Donc si jamais un programme réutilise cet espace, si on écrase pas les données, on a un résidu dont on ne connait pas la valeur. Donc par sécurité, on écrase toujours par une initialisation à 0. Bon si tu connais à l'avance la valeur, tu peux directement l'initialisée à la valeur adéquat. Par exemple, tu sais que les ennemis ont des points de vie et qu'ils sont à 10, tu vas initialiser ta variable à 10.

Mais si tu ne sais pas à l'avance ce que va comporter ta variable, ou qu'elle change au court du temps, tu l'initialises à 0 par sécurité. Et tu lui attribut une valeur plus tard.

Pour ton problème de déformation, il faudrait l'image de base et l'image rendue. Il se peut que se soit une déformation due à ton écran.

edit : L’initialisation à 0 n'est pas obligatoire dans gamemaker, mais je préfère t'initier aux bonnes pratiques si jamais tu veux t'orienter plus tard vers un langage de programmation plus costaud qui lui nécessitera de passer par cette étape.
Si t'as un truc électronique cassé, ça se passe par là https://www.atelier-electrodd.fr/

-Je comprend rien à ce que tu dis...
-Pas grave... C'est pas en vivant plus longtemps qu'on deviens moins con.
Karmer
Jeune Pad-awan
Messages : 40
Inscription : 23 nov. 2013, 01:10

d'accord, ça y'est j'ai tout capté.

Pour le problème du sprite, j'ai essayé sur un autre écran, c'est la même. Je te fournis le .gmk du jeu et l'image du vaisseau sur lequel c’est le plus flagrant notamment au niveau de l'insigne bleu/jaune sur la queue ainsi que sur la vitre du cockpit.
http://www.petit-fichier.fr/2013/11/24/shmup/

Je bosse sur un écran 27 pouces, 1920*1080, 60hz
Karmer
Jeune Pad-awan
Messages : 40
Inscription : 23 nov. 2013, 01:10

Je continue à avancer tranquillement dans mon jeu, enfin j'en suis vraiment qu'aux bases, mais ça me satisfait pour l'instant pour ne pas abandonner :p.
Je pense que je viendrais vous poser des questions d'ici peu de temps ... d'ailleurs je ne suis pas contre une autre petite leçon ;) .

Je voulais savoir, Gunny est-ce que tu utilises la programmation personnellement pour faire tes application ou est-ce que ça reste dans le cadre de ton travail ? (j'ai vu dans ton profil que tu es technicien info)
Gunny
Empereur Bydo
Messages : 3404
Inscription : 15 mai 2006, 15:26
Localisation : Rayon chaussettes du Kiabi du coin
Contact :

C'est une utilisation perso ^^
J'en fais plus vraiment depuis un moment...
Mais bon, ca m’empêche pas d'avoir un minimum de savoir pour aider ;)

Faudra que j'aborde la partie "portée des variables"... Ca permet d'éviter certains bugs ^^ ( et plus tard de faire de l'optimisation )

Normalement, on voit ca une fois qu'on a vu les fonctions...
Mais vu que dans gamemaker tout script est considéré comme une fonction, on est obligé de voir ca un poil plus tot.
Si t'as un truc électronique cassé, ça se passe par là https://www.atelier-electrodd.fr/

-Je comprend rien à ce que tu dis...
-Pas grave... C'est pas en vivant plus longtemps qu'on deviens moins con.
Avatar de l’utilisateur
Alec
King Fossile
Messages : 15772
Inscription : 12 juil. 2004, 18:04
Localisation : nstc-j

Karmer a écrit :d'accord, ça y'est j'ai tout capté.

Fais attentin au tuto de derek yu, il est très bien le hic c'est qu'il est pas customisable sans galères !

J'ai utilisé ça quand j'ai fait breakforce et bon, comme ébauche et première approche de game maker c'est bien mais par la suite tu aura pas mal de contraintes !

Donc sers toi de ce projet comme entrainement mais je te conseille de créer ton propre système ensuite !

Et attention avec les objets parents, c'est super intéressant mais par la suite si ton gameplay se complique, si c'est mal géré c'est la merde !
ImageImageImage
Gunny
Empereur Bydo
Messages : 3404
Inscription : 15 mai 2006, 15:26
Localisation : Rayon chaussettes du Kiabi du coin
Contact :

La portée des variables dans Gamemaker :

Alors je sais pas si ca a changé depuis la 8.1, il faudra peut-être adapté...

J'ai dit dans un précédent post que tout script dans GM est considéré comme une fonction. J'ai déjà fait un petit topo sur les fonctions dans un de mes précédents messages sur ce sujet donc je ne reprendrais pas ce point.

Déjà, on va devoir comprendre ce que veut dire "portée" dans portée des variables.

De manière très simplifiée ( et surement incorrecte ), c'est leur "durée de vie".
Et elles peuvent avoir plusieurs durées de vie suivant comment on les utilise.

Y en a 2 principales.

La première, elle reste en vie tant que l'objet ( plus tard pour les notions d'objets ) qui la contient reste en vie

La deuxième, elle reste en vie UNIQUEMENT pendant l'exécution du script; et donc par extension à la fonction dont elle dépend.

Et c'est là que peut se poser des problèmes... Car toute variable qui n'est pas spécifiquement déclarée comme dépendante du script va continuer d'exister tant que l'objet existe. Et il y a BEAUCOUP de cas où l'on ne veut pas que cela se produise.

Exemple, j'ai mis un script de tirage de dé pour un RPG dans le sujet. Et bien si on ne spécifie pas que ces variables ne doivent rester que durant l'exécution du script, l'objet qui les contient va garder les valeurs, et on se retrouve avec un bug qui donne des résultats imprévisibles.

Contrairement à d'autres langage, les variables sont automatiquement de "portée objet".

Il faut donc spécifier avec le mot clé "var" que ces variables ne doivent rester vivantes que le temps du script. Il faut donc prendre la peine de se poser la question : "Est-ce que j'ai besoin de ces variables ailleurs et à un autre moment ou est-ce que j'ai besoin du résultat du script/fonction ailleurs ?"

Si on en a pas besoin ailleurs que dans le script, on va les déclarer et initialiser dans le script en question.

Exemple :

Code : Tout sélectionner

// déclaration des variable
var variable1 , variable2 , variable3;

// initialisation des variables
variable1=0; 
variable2=1;
variable3=2;
On met ça en début de script.

Si j'ai dit une boulette, merci de me corriger ^^
Si t'as un truc électronique cassé, ça se passe par là https://www.atelier-electrodd.fr/

-Je comprend rien à ce que tu dis...
-Pas grave... C'est pas en vivant plus longtemps qu'on deviens moins con.
Karmer
Jeune Pad-awan
Messages : 40
Inscription : 23 nov. 2013, 01:10

Et hop des infos de plus à mettre dans mon petit dossier de cours ! Merci encore ;)
Rah mais quand même, quel dommage que tout ce tuto sous PDF soit perdu, aucun lien ne fonctionne (bon en même temps après 2 ans ...) mais je viens de voir que certains posts dans l'topic m'ont echappés donc je vais me faire un plaisir de les lire.

J'ai pas mal rigolé quand, Alec, tu parlais dans un de tes post de "castration vidéoludique" =)
cette manière de voir le jeu après avoir entrevu la programmation. Depuis quelques jours je suis RE 3 et je peux dire que ça me le fait un peu, même si j' connais pas grand chose ... Mais bon je suis quand même à fond dedans, bien tendu comme un string à chaque fois q'j'arrive dans un nouvel endroit inexploré, bien glauque.

Gunny t'as développé quoi de personnel avec la programmation ?

@ + tard
Gunny
Empereur Bydo
Messages : 3404
Inscription : 15 mai 2006, 15:26
Localisation : Rayon chaussettes du Kiabi du coin
Contact :

Essentiellement de petits outils.
Avec gamemaker j'avais fait un logiciel de macro pour un jeu ( suffisemment évolé pour être presque considéré comme un bot ).
En C++ de petits outils de calculs de rentabilités pour ogame ( quand j'y jouais ).
Pas mal de recherche et prototypes de jeu pour la découverte.

Jvais ptete me mettre à moder un jeu que j'ai, strike suit zero.
Les outils de moding sont plus délicats à manier que ceux d'autres jeux, mais je pense que ca pourrait etre intéressant.
Si t'as un truc électronique cassé, ça se passe par là https://www.atelier-electrodd.fr/

-Je comprend rien à ce que tu dis...
-Pas grave... C'est pas en vivant plus longtemps qu'on deviens moins con.
Karmer
Jeune Pad-awan
Messages : 40
Inscription : 23 nov. 2013, 01:10

Intéressant toute ces possibilités =)
C'est là que je me dis que j'ai encore beaucoup de temps avant de concrétiser des idées pourtant simples.
En fait j'aimerai surtout me concentrer sur le game-design et je vais tenter en Avril d'intégrer une école. Mais il me semble important d'avoir des connaissances dans la programmation, dans l'outil, et personnellement je trouve ça fascinant :charme: et puis à l'heure actuelle c'est la seule manière de mettre en place mes idées.
Je connaissais pas Strike Suit Zero ça m'a l'air plutôt sympa dans son genre.
Gunny
Empereur Bydo
Messages : 3404
Inscription : 15 mai 2006, 15:26
Localisation : Rayon chaussettes du Kiabi du coin
Contact :

Avril et avoir un projet à présenter pour un entretien d'entrée ( j'avais préparé y a 10 ans un pote à entrer dans une école d'infographie privée à paris en le formant sur blender du peu que je savais faire, ca avait suffit à impressionné le gars )...
Ca va faire court... Surtout avec la masse d'infos à apprendre.

Faudra te contenter d'un projet simple.
Choper des sprites à droite et à gauche, ca permettra de gagner du temps.
Et parfois on risque de te fournir des scripts que tu ne comprendras pas pour te faire aussi gagner du temps.

Je sens qu'il va falloir rebrancher mon vieux PC avec gamemaker xD
Si t'as un truc électronique cassé, ça se passe par là https://www.atelier-electrodd.fr/

-Je comprend rien à ce que tu dis...
-Pas grave... C'est pas en vivant plus longtemps qu'on deviens moins con.
Karmer
Jeune Pad-awan
Messages : 40
Inscription : 23 nov. 2013, 01:10

Oui je me dit que ça va être juste mais je compte faire en sorte de compléter ça avec un espèce de cahier en présentant les mécaniques, les changements du au contraintes, les contournements si le projet n'est pas totalement abouti ...
J'espère que j'aurai quelque chose de suffisant.

Pour l'instant mon projet est assez simple dans les grandes lignes, et peut-être étoffé avec d'autres choses. Il s'agit d'un jeu de duel 2 joueurs inspiré de la borne d'arcade Gun Fight (http://www.youtube.com/watch?v=gRwwN1N5KSA).
Je l'ai découvert y a environ un mois et j'ai trouvé le concept super simple et fun ! et au delà du projet a présenter j'aimerai aboutir à une version finale, plus tard.

"Je sens qu'il va falloir rebrancher mon vieux PC avec gamemaker xD" Si le coeur t'en dis je suis pas contre et puis ça lui fera plaisir =p !
Gunny
Empereur Bydo
Messages : 3404
Inscription : 15 mai 2006, 15:26
Localisation : Rayon chaussettes du Kiabi du coin
Contact :

Ok, je vois où tu veux aller, ca devrait être faisable en 3-4 mois, par contre tu oublies noel et nouvel an.

Tfacon t'auras pas la tete à la fête, tu vas très vite te retrouver à penser code, mécanismes, a hurler EUREKA et courir vers ton PC pour mettre en pratique et faire des tests pendant des heures :D

Le dév de jeu nous transforme en monstre...

Jvais te faire un petit cour sur les notions de programmation objets élémentaires pour gamemaker et ensuite, on pourra attaquer le vrai code pour comprendre tout un tas de trucs.
Si t'as un truc électronique cassé, ça se passe par là https://www.atelier-electrodd.fr/

-Je comprend rien à ce que tu dis...
-Pas grave... C'est pas en vivant plus longtemps qu'on deviens moins con.
Karmer
Jeune Pad-awan
Messages : 40
Inscription : 23 nov. 2013, 01:10

J'ai quand même aussi pas mal de temps chaque jours, pour le moment, étant donné que je suis au chômage ! et tant pis pour le nouvel an, et je veux bien être transformé en monstre !! =p

J'espère pouvoir aussi décliner le terrain en plusieurs "versions" qui pourraient modifier la façon de combattre, et faire en sorte que les adversaires puissent se donner des malus/bonus... enfin je pars dans les détails.

J'attends donc ce cours avec impatience =) ! il faut qu'en attendant je continue à créer les sprites. Pour l'instant j'ai mon fond de terrain de jeu (que j'ai fait), mes deux personnages (sprites de Sunset Riders) qui se déplacent, tirent devant eux (grossièrement) et c'est tout ^^.
Le plus gros problème qui se pose pour le moment et que je ne sais pas comment faire pour que que l'on puisse sélectionner la direction dans laquelle on veut tirer, sans que ce soit contraignant au niveau de la manipulation avec le clavier. Peut-être qu'il faudrait utiliser une manette pour pouvoir avoir un joystick, en plus être à deux sur un clavier c'est pas le mieux ... enfin bon, à voir en fonction des possibilités

Allez au boulot sur les sprites !
Gunny
Empereur Bydo
Messages : 3404
Inscription : 15 mai 2006, 15:26
Localisation : Rayon chaussettes du Kiabi du coin
Contact :

La programmation orienté objet :

Dans ces mots obscures se cachent un concept magique et assez simple à comprendre.
L'objet, il faut le prendre au sens premier du terme, à savoir une chose.
Comme dans la vraie vie, ce qui défini un objet, par exemple une chaise, sont ces fonctionnalités, représentées par les fonctions, et ces propriétés, représentés par des variables.

On comprend donc que d'un point de vu programmation, un objet est un conteneur, il peut contenir des variables, des fonctions ( et aussi d'autres objets, rien n’empêche un conteneur de contenir un autre conteneur )

Un concept très important en orienté objet, c'est ce qu'on appelle l'encapsulation.
En principe, ca sert à "cacher" ce qu'il y a dans un objet. Dans gamemaker, on peut presque dire que ca n'existe pas.
Un exemple tout bête avec la chaise, tu n'as pas besoin d'avoir la notice d'utilisation qui décrit étape par étape comment s'assoir. Tu vas juste utiliser cette fonctionnalité.
En orienté objet, on va faire pareil, tu te fout de savoir comment fonctionne la fonction "assoir", tu veux juste l'utiliser.

Reprenons l'exemple de la chaise.
On va commencer par qqc de simple, à savoir ces propriétés.
La chaise la plus simple se décrit de cette manière :
-4 pieds
-un dossier
-une surface
-sert à s'assoir


En programmation on obtiendra donc :

Code : Tout sélectionner

chaise
{
pieds;
dossier;
surface;
}
En ajoutant la fonctionnalité s'assoir :

Code : Tout sélectionner

chaise
{
pieds;
dossier;
surface;
fonction_assoir();
}
Il va sans dire que, il faut aller regarder le code de l'objet chaise si on veut voir comment ca fonctionne.

On aurait un truc du genre :

Code : Tout sélectionner

chaise
{
pieds=4;
dossier=1;
surface=1;
fonction_assoir()
     {
     Tant que ( fesse pas toucher surface )
          { plier les genoux et baisser les fesses }
     }
}
Là, tu vas me poser la question, oui mais comment je fais tout ca dans gamemaker ?
Gamemaker te simplifie la vie, parce que la programmation orienté objet, c'est bien plus étendu que ca...

Déjà, tu as vu avec les variables ( le premier conteneur que tu as connu ) qu'il fallait les créer et les initialiser.

Pareil pour les objets. Admettons, tu créés un objet chaise dans les ressources de gamemaker. Tu le mets dans une room. Au moment du lancement du jeu, tu as plusieurs évènements qui se passent. On va s'intéresser à ce qui se passe pour l'objet.

Donc la room se créé, s'initialise, ensuite, ton objet est créé dans la room. Et là, tu as un premier évènement qui s'appelle CREATE.

Si tu lance ton projet en mode debug, tu peux aller consulter le visualiseur d'objet et rentrer son "numéro de série" ( si tu lui as mis un sprite, suffit de pointer dessus ta souris pour avoir le numéro en bas à gauche ).

Et là tu devrais voir tout un tas de trucs. Gamemaker initialise tout un tas de trucs de base pour ton objet, et tous les objets sont créés avec ces valeurs.

Create, c'est à cette étape que tu vas initialiser les variables dont tu as besoin pour ton objet. Toutes les variables dont tu as besoin pour que l'objet fonctionne ( et uniquement cet objet ), tu vas les mettre dans un script et les initialiser. Tu as ensuite lier ce script à l'évènement CREATE.

Tu sauvegardes, et tu lances en mode debug, tu regardes à nouveau les propriétés de ton objet, et tu vas voir que les variables que tu as mis dans ton script son apparues !

Je ne pense pas avoir besoin de t'expliquer les events ( y a quelques cas particuliers si jamais tu as des problèmes je les expliquerais si tu penses faire face à un bug ).

Si jamais tu as besoin d'interagir avec un autre objet... Par exemple pour connaitre la distance entre l'objet "fesse" et "chaise" pour savoir si tu dois continuer à baisser l'objet "fesse" pour toucher l'objet "chaisse" on utilise le point entre le nom de l'objet et l'élément de l'objet qui nous intéresse. Ca peut etre une variable comme une fonction.
Exemple :

Code : Tout sélectionner

fesse.gauche
On accède à l'attribut "gauche de l'objet fesse". Et d'après le contexte, tu comprends que "gauche" est une variable de l'objet "fesse".

On a donc les objets "fesse" et "chaise" décris comme ceci :

Code : Tout sélectionner

Fesse
{
coord_x;
coord_y;
assoir();
}

Code : Tout sélectionner

Chaise
{
coord_x;
coord_y;
pieds;
surface;
dossier;
occupé;
}
La fonction/script assoir contiendrait un code du genre :

Code : Tout sélectionner

Assoir
{
Tant que ( coord_x > Chaise.coord_x ET coord_y > Chaise.coord_y ) //cette ligne contient un mot clé important
     {
     baisser coord_x;
     baisser coord_y;
     }
}
Le mot clé important ( le mot ET ) dans ce bout de code s'appelle une opération logique. C'est utile quand on veut ajouter des "vérités" dans les boucle ou les conditions. Ca sera détaillé plus tard.

Ce script est exécuté pendant l'event "step" de l'objet "fesse", comme ca, à chaque frame, il va mettre les coordonnées X et Y de l'objet Fesse en mouvement. Tu vas me demander pourquoi on met pas Fesse.coord_y ?
Parce que c'est l'objet Fesse qui "execute le script" ( c'est plus ou moins faux mais ca permet de mieux comprendre ). Dès que tu as besoin d'information sur un objet qui n'est pas celui qui "exécute le script", tu as besoin d'utiliser cette forme :

Code : Tout sélectionner

objet.variable
Si tu as besoin d'utiliser une fonctions ou un script d'un autre objet, c'est la même chose, tu appelles l'objet par son ID ou son nom ( il est préférable d'utiliser le numéro d'ID plutot que le nom d'un objet quand tu as plusieurs fois le meme objet dans la scène courante ) et tu appelles la fonction : objet.fonction(paramètres)

Il faut faire TRES attention à ce que l'on fait quand on utilise ce genre de mécanisme. Dans d'autres langages, on passe par ce que l'on appelle des accesseurs ( des fonctions dédiées à aller chercher ou modifier les infos d'un objet ). Tu comprends que pouvoir lire et modifier les informations de manière directe dans un objet peut engendrer des bugs.
Il n'empêche que c'est bien pratique dans certaines situations.

On a aussi des notions d'objet "parent" et "fils", pareil pas très compliqué à comprendre... Le terme dédié s'appelle l'héritage. Tu comprends très facilement que le "fils" d'un objet "hérite" de tout ce que son "père" possédait ( variables et fonctions ), on pourrait parler de clônes, mais ce n'est pas exact. Parce qu'il est possible à la création d'un objet "fils" de modifier son "code génétique" ( variables et fonctions ).
Mais ca, tu n'en auras une utilité que sur des jeux un minimum complexe. ( dans le cas d'un shoot, si tu veux faire un boss à parties multiples plus ou moins indépendantes, ca devient quasi nécessaire pour simplifier la gestion du truc ).

Je m'arrête là, si tu as des questions, hésite pas !

Sinon, je vais ptete passer à la version studio ( en MAJ ca me coute 10€ donc je peux me le permettre ), j'ai ptete moyen de récupérer une vieille version de mon tuto format PDF et repartir de là, et comme j'aime beaucoup faire des vidéos, ptete en faire un tuto vidéo ! Faut d'abord que j'aille fouiller mon ancien disque dur que j'ai conservé...
Si t'as un truc électronique cassé, ça se passe par là https://www.atelier-electrodd.fr/

-Je comprend rien à ce que tu dis...
-Pas grave... C'est pas en vivant plus longtemps qu'on deviens moins con.
Avatar de l’utilisateur
Alec
King Fossile
Messages : 15772
Inscription : 12 juil. 2004, 18:04
Localisation : nstc-j

Karmer a écrit : J'ai pas mal rigolé quand, Alec, tu parlais dans un de tes post de "castration vidéoludique" =)
cette manière de voir le jeu après avoir entrevu la programmation.

Et je déteste ça, aujourd'hui et surtout pour les rpg quand j'y joue, je rale et au lieu de penser "où il est ce perso qui déclenche la suite", ça donne des délires en code "if player collision with obj0032, go to room n°14" !

C'est rigolo à en parler comme ça mais en pratique ça casse la magie !
ImageImageImage
Karmer
Jeune Pad-awan
Messages : 40
Inscription : 23 nov. 2013, 01:10

Bon, dans l'ensemble je suis arrivé à cerner le tout, un peu moins la deuxième partie sur
les interactions entre les objets mais ça va.
Pour l'instant j'ai créé un script pour chacun des deux personnages, qui contient : la vitesse de l'animation, la vitesse de déplacement, et les pv. Et tout ça se déclenche dans l'Evenement Create.
Je vais essayé de voir si je peux créer en plus, une fonction de tir et un effet d'impact sur l'adversaire pour chacun, en relisant et en appliquant tout ça (je l'ai déjà fait mais en "bricolant" avec le code).

Je prie le seigneur YOYO que tu puisse retrouver ce PDF dans ce disque dur, surtout pour que tu puisse t’alléger le travail ^^ en tout cas, t'as une super pédagogie tu devrais écrire un bouquin d'initiation a Game Maker =p
Mention spéciale à ce tuto qui m'a bien fait marrer, avec l'objet "fesse" :)
Karmer
Jeune Pad-awan
Messages : 40
Inscription : 23 nov. 2013, 01:10

Alec a écrit :
Karmer a écrit : J'ai pas mal rigolé quand, Alec, tu parlais dans un de tes post de "castration vidéoludique" =)
cette manière de voir le jeu après avoir entrevu la programmation.

Et je déteste ça, aujourd'hui et surtout pour les rpg quand j'y joue, je rale et au lieu de penser "où il est ce perso qui déclenche la suite", ça donne des délires en code "if player collision with obj0032, go to room n°14" !

C'est rigolo à en parler comme ça mais en pratique ça casse la magie !
Ah oui, à ce point là je comprends ... Il faut faire une cure, trouver un moyen !
Karmer
Jeune Pad-awan
Messages : 40
Inscription : 23 nov. 2013, 01:10

En terme de "construction du code", je passe systématiquement par un script que j'initialise avec Create, pour les variables d'objets ?
Dernière modification par Karmer le 02 déc. 2013, 19:15, modifié 1 fois.
Gunny
Empereur Bydo
Messages : 3404
Inscription : 15 mai 2006, 15:26
Localisation : Rayon chaussettes du Kiabi du coin
Contact :

C'est à peu près ça ^^

En général, je créé un script "initializing" et je met dedans toutes les variables dont a besoin l'objet pour fonctionner.
Si t'as un truc électronique cassé, ça se passe par là https://www.atelier-electrodd.fr/

-Je comprend rien à ce que tu dis...
-Pas grave... C'est pas en vivant plus longtemps qu'on deviens moins con.
Karmer
Jeune Pad-awan
Messages : 40
Inscription : 23 nov. 2013, 01:10

ok =)
Gunny
Empereur Bydo
Messages : 3404
Inscription : 15 mai 2006, 15:26
Localisation : Rayon chaussettes du Kiabi du coin
Contact :

Voilà, j'ai retrouvé le fichier :
http://www.filedropper.com/tuto_1

Il est pas terminé mais bon...
Si t'as un truc électronique cassé, ça se passe par là https://www.atelier-electrodd.fr/

-Je comprend rien à ce que tu dis...
-Pas grave... C'est pas en vivant plus longtemps qu'on deviens moins con.
Karmer
Jeune Pad-awan
Messages : 40
Inscription : 23 nov. 2013, 01:10

Aaah SUPER !!! Je jette un coup d'oeil aujourd'hui en fin d'aprem' dès que je rentre chez moi. je suis impatient !
mes journées commencent à être de plus en plus remplies par ce projet, mais ça me plait ! Adieu Les jeux que je voulais commencer ce mois-ci !
Gunny
Empereur Bydo
Messages : 3404
Inscription : 15 mai 2006, 15:26
Localisation : Rayon chaussettes du Kiabi du coin
Contact :

Alors ? T'en penses quoi du document ?
Si t'as un truc électronique cassé, ça se passe par là https://www.atelier-electrodd.fr/

-Je comprend rien à ce que tu dis...
-Pas grave... C'est pas en vivant plus longtemps qu'on deviens moins con.
Karmer
Jeune Pad-awan
Messages : 40
Inscription : 23 nov. 2013, 01:10

Ben écoute malheureusement je ne suis pas rentré chez moi comme prévu, j'ai pas pu bosser sur la production, j'ai juste continué sur papier à poser d'autres idées, à "penser" le code et peaufiner l'esprit graphique... Mais t'en fais pas je pense que ce sera à ma convenance!
Demain matin je suis opérationnel chez moi, et frais comme un gardon ! Je te ferais des retours sans problèmes ;)
Répondre