Retour à l'accueil
Accueil Aide Rechercher Calendrier Identifiez-vous Inscrivez-vous
Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?
19 Septembre 2019 à 21:52

Connexion avec identifiant, mot de passe et durée de la session
Règlement | Grades du forum | L'équipe de modération | Album photo | Chat
Rechercher:     avancée
Forums Zelda Solarus  |  Jeux amateurs  |  Programmation  |  Topic: GML 0 Membres et 1 Invité sur ce sujet.
Pages: [1] Imprimer
Auteur Sujet: GML  (Lu 7942 fois)
Chao
Héros
*
Offline Offline

Messages: 6 047


/人 ◕ ‿‿ ◕ 人\


Courriel
GML
« le: 30 Novembre 2011 à 21:06 »

Hellow,

J'aimerai me mettre un peu au GML (Game Maker Language) mais je ne trouve pas de documentation sur le langage.
Je me souviens d'un fichier word/pdf que j'avais trouvé il y a quelques années mais je ne le retrouve pas et chercher sur google m’amène partout sauf où je veux.

Si vous avez quelque choses merci de me donner le lien.

English is fine too.

Merci.

//EDIT//
Problème résolue, je poste le lien de ZR vers la documentation au premier poste pour éviter au futur personne de chercher plus loin qu'il le faut :).

ici

Le topic peut rester ouvert puisqu'il est possible d'en faire un regroupement de question sur le langage.
« Dernière édition: 01 Décembre 2011 à 00:55 par Chao » Journalisée

Morwenn
Sheikah
*
Offline Offline

Messages: 3 268


And so what?


WWW Courriel
« Répondre #1 le: 30 Novembre 2011 à 22:50 »

En fait, il n'y a pas grand-chose à apprendre du langage en lui-même, il est très basique et est inspiré du C, sauf que tu ne déclares pas tes variables, tu ne les types pas explicitement et les seuls types présents sont les réels et les chaînes ne caractère.
Du reste, il y a énormément de fonctions standard, qui permettent en général de faire pas mal de trucs. D'une manière générale, la documentation peut te servir aux 3/4 à faire ce que tu veux. De ce qui est du reste, il y a des tutoriels et des gens prêts à aider sur le CBNA et son forum. Les membres sont généralement de bon conseil :)
Journalisée

iArcadia
Sheikah
*
Offline Offline

Messages: 4 823



Courriel
« Répondre #2 le: 30 Novembre 2011 à 22:52 »

Si tu as essayé le D&D de GM, il me semble qu'il y a un logiciel gratuit sur le CBNA qui montre l'équivalent GML de chaque icône D&D.
Journalisée
Chao
Héros
*
Offline Offline

Messages: 6 047


/人 ◕ ‿‿ ◕ 人\


Courriel
« Répondre #3 le: 30 Novembre 2011 à 23:40 »

En fait, il n'y a pas grand-chose à apprendre du langage en lui-même, il est très basique et est inspiré du C, sauf que tu ne déclares pas tes variables, tu ne les types pas explicitement et les seuls types présents sont les réels et les chaînes ne caractère.
Du reste, il y a énormément de fonctions standard, qui permettent en général de faire pas mal de trucs. D'une manière générale, la documentation peut te servir aux 3/4 à faire ce que tu veux. De ce qui est du reste, il y a des tutoriels et des gens prêts à aider sur le CBNA et son forum. Les membres sont généralement de bon conseil :)

Justement je ne connais pas les fonctions de bases du langage en plus de n'avoir jamais fait de C donc j'aurais besoin d'une documentation les regroupant  :mrgreen:.
Journalisée

iArcadia
Sheikah
*
Offline Offline

Messages: 4 823



Courriel
« Répondre #4 le: 01 Décembre 2011 à 00:47 »

La documentation du logiciel regroupe une très grande partie des fonctions. Elle est aussi disponible ici.
Journalisée
Chao
Héros
*
Offline Offline

Messages: 6 047


/人 ◕ ‿‿ ◕ 人\


Courriel
« Répondre #5 le: 01 Décembre 2011 à 00:54 »

La documentation du logiciel regroupe une très grande partie des fonctions. Elle est aussi disponible ici.

D'ac, merci beaucoup, c'est assez proche de ce que je recherchais :).
Journalisée

Wouf
Hylien
*
Offline Offline

Messages: 1 116


C'est la faim !


Courriel
« Répondre #6 le: 01 Décembre 2011 à 03:06 »

Ouaip, moi aussi j'ai appris avec la traduction de Philippe Ragni :)
En revanche, comme tu peux le voir, ça date un peu : GM 6.1.

Ca reste une bonne base et pour les nouvelles fonctionnalités, tu peux consulter la doc anglaise.
Toutes les docs approuvées sont listées sur cette page.

Bon apprentissage !

Han, j'ai toujours ma farde de GML :ninja:
Journalisée

Marre des pavés ? Marchez dans la boue!
ハハ、あなたは私の罠に落ちた!
Chao
Héros
*
Offline Offline

Messages: 6 047


/人 ◕ ‿‿ ◕ 人\


Courriel
« Répondre #7 le: 01 Décembre 2011 à 03:08 »

Ouaip, moi aussi j'ai appris avec la traduction de Philippe Ragni :)
En revanche, comme tu peux le voir, ça date un peu : GM 6.1.

Ca reste une bonne base et pour les nouvelles fonctionnalités, tu peux consulter la doc anglaise.
Toutes les docs approuvées sont listées sur cette page.

Bon apprentissage !

Han, j'ai toujours ma farde de GML :ninja:


Merci ^^.
Journalisée

Morwenn
Sheikah
*
Offline Offline

Messages: 3 268


And so what?


WWW Courriel
« Répondre #8 le: 01 Décembre 2011 à 15:31 »

Oui, mais même si la documentation date, le logiciel en lui-même (éditeur de code, éditeur de sprites...) a beaucoup plus changé que le langage. Il y a eu quelques fonctions de rajoutées depuis, mais c'est tout, rien de bien important^^
Journalisée

Chao
Héros
*
Offline Offline

Messages: 6 047


/人 ◕ ‿‿ ◕ 人\


Courriel
« Répondre #9 le: 08 Décembre 2011 à 01:06 »

Bon, avant tout sachez que je n'ai pas beaucoup d'expérience en programmation, le JavaScript étant le seul langage de programmation que j'utilise régulièrement.
J'ai un projet en tête et je pense régulièrement à comment je vais m'y prendre pour coder différentes parties mais il y a un truc qui me gène énormément.
Note que je n'ai pas encore bidouillé avec GM par manque de temps, j'y viendrais bientot car je suis en période d'examen.
Si j'ai bien compris les variables sont propre à un script, donc leur porté n'est valide que dans le même script où elles sont créées.

Par exemple j'ai un personnage héros qui possède plusieurs scripts visant l'interactivité du héros avec les autres objets. Lorsque la hitbox du héros entre en collision avec celle d'un rubis par exemple j'augmente la variable 'monnaie' en fonction de la valeur désirée, je détruis l'instance du rubis et je fais afficher la nouvelle valeur à l'écran.
Pas de problème jusqu'à maintenant.
Par la suite je veux programmer un marchant, une fois que l'utilisateur appuiera sur la touche action tout en étant dans une zone prédéfinie proche du marchant je veux que le script se lance. M'enfin arrêtons de tourner autour du pots, peut-importe comment je m'y prends, de cette façon je vais devoir aller chercher la valeur de l'argent posséder par le héros et la comparer avec le prix des objets en ventes pour que la vente soit fonctionnel. Or cette variable est propres au script qui gère l'interactivité entre le héros et l'argent et je ne pourrais donc pas alors aller la chercher.

Bien-sur je peux tout simplement tout coder l'interactivité du jeu au grand complet dans un seul script mais bonjours le lag de la mort qui tue.

Y a t-il une façon d'établir des variables globales à tout les scripts ou bien est-ce que ma façon de penser n'est tout simplement pas adapté à la création d'un jeu?
Journalisée

Daru13
Conseiller J-A
Héros
*
Offline Offline

Messages: 5 584


Photoshop addict


Courriel
« Répondre #10 le: 08 Décembre 2011 à 01:42 »

Je ne connais pas le GML, mais je viens de jeter un rapide coup d'oeil à la doc, et il est expliqué comment déclarer une variable globale dès le début de la partie sur le GML (pages 130-131 du PDF) :P.
Quote
To create global variables, that are visible to all object instances, precede them with the word global and a dot.

D'autre part, une autre "solution" est proposée juste après (page 132), afin d'affecter une variable à un objet (le concept tant la syntaxe te seront d'ailleurs assez familiers vu que tu fais du Javascript ^^). C'est aussi une bonne solution du coup (meilleure et plus claire que la première à mon avis :p).
Quote
This can be achieved by preceding the variable name with the name of an object and a dot.

Du coup, dans ton exemple, un bon moyen de gérer ce genre de trucs type rubis ou encore vie du héros, serait d'attribuer rapidement quelques variables à ton héros par exemple (du type heros.argent = n;).

En esperant que ça puisse t'aider ^_^.
Journalisée


    





Morwenn
Sheikah
*
Offline Offline

Messages: 3 268


And so what?


WWW Courriel
« Répondre #11 le: 08 Décembre 2011 à 15:34 »

Ce qu'a dit Daru est correct, mais je vais étoffer tout ce qui concerne la portée des variables  :P

Variables globales

Les variables globales dans Game Maker s'écrivent de la manière suivante :

Code: [Select]
global.ma_variable = 2
Ici, tu pourras accéder à ta variable depuis n'importe où en réécrivant le nom complet, le préfixe global y compris. Il y aussi moyen de déclarer ainsi une variable globale :

Code: [Select]
globalvar ma_variable = 2
ou

Code: [Select]
globalvar ma_variable
ma_variable = 2

Ceci dit, avec cette seconde solution, ma_variable ne représentera que la variable globale, et tu ne pourras appeler nulle part des variables locales ma_variable, tandis que c'est possible si tu l'utilises juste avec global.ma_variable qui lui est de loin préférée.

Mais dans ton cas, on doit pouvoir faire sans variable globale.


Variable locale à un objet

Toute variable déclarée dans un objet est locale à cet objet. Tu peux les instancier de deux manières différentes dans le code de l'objet :

Code: [Select]
ma_variable = 2ou
Code: [Select]
local.ma_variable = 2
Si tu veux accéder à la variable locale d'un objet depuis un autre objet, tu as plusieurs solutions. La première consiste à marquer le nom de l'objet suivi d'un point et du nom de la variable :

Code: [Select]
heros.ma_variable = 2
Ceci dit, si tu as plusieurs objets de type hero, ça va en prendre un de manière arbitraire sans que tu puisses choisir. Tu coup, tu peux aussi utiliser l'opérateur with qui permet de faire exécuter du code dans les objets voulus. Ça donnerait ça :

Code: [Select]
with (hero)
{
    ma_variable = 2
}

Cependant, cette méthode a elle aussi son défaut : si tu as plusieurs objets de type hero, alors ce morceau de code sera exécuté dans tous les objets de ce type.

Accès par l'id d'un objet

Dans Game Maker, chaque objet a un numéro d'id. Tu peux le récupérer avec la variable id de l'objet en question. Ou alors directement à la création, il est retourné par la fonction instance_create et quelques autres :

Code: [Select]
id_hero = instance_create(25, 25, hero)

id_hero.ma_variable = 2

Si on connaît l'id d'un objet en brut, ce qui est fort peu probable, on pourra écrire (100015).ma_variable = 2 en estimant que l'id de l'objet est 100015. Mais au pire, oublie ça, c'est dans tous les cas à éviter.

Variables dans les scripts

Pour les scripts extérieurs aux objets, c'est un peu plus subtil : lors d'un appel à un script, il est exécuté dans l'objet qui l'a appelé. Ainsi, toutes les variables locales déclarées sans spécification dans le script sont considérées comme appartenant à l'objet appelant. Ainsi,

Code: [Select]
a = 3
dans un script créera une variable a dans l'objet appelant et l'initialisera à 3. Ceci dit, si on veut éviter les conflits de noms, on peut faire en sorte que les variables soient locales au script en les précédant par le mot-clef var à l'initialisation :

Code: [Select]
// Création de variables locales au script
var i, j

i = 2
j = 5
// Les variables sont détruites à la fin du script

Notons que var utilisé dans une boucle quelconque permet une destruction de la variable créée à la fin de la boucle si je ne me trompe pas :)

Identificateurs spéciaux

Chaque objet possède des variables utiles dans certaines circonstances : self, other et all :
  • self permet à un objet de se désigner soi-même. self.ma_variable est équivalent à ma_variable.
  • other n'est utilisable que dans les évènements de collision de l'objet : il désigne l'objet avec lequel l'objet courant vient d'entrer en collision. Vraiment très pratique pour par exemple récupérer la valeur en argent stockée dans un rubis avec other.monnaie ;)
  • all désigne toutes les instances. D'une manière générale, il vaut mieux éviter de l'utiliser...


    Voilà, c'est à peu près tout ce qu'il y a à savoir sur les variables dans Game Maker et la façon dont elles sont appelées. Tu devrais y trouver ton compte.
« Dernière édition: 08 Décembre 2011 à 15:42 par Morwenn » Journalisée

Chao
Héros
*
Offline Offline

Messages: 6 047


/人 ◕ ‿‿ ◕ 人\


Courriel
« Répondre #12 le: 11 Décembre 2011 à 15:11 »

Merci beaucoup pour le pavé, c'est exactement ce que j'avais besoin :).
Journalisée

Morwenn
Sheikah
*
Offline Offline

Messages: 3 268


And so what?


WWW Courriel
« Répondre #13 le: 11 Décembre 2011 à 23:36 »

À ton service^^

Si tu as d'autres questions, je n'hésiterai pas à y répondre ;)
Journalisée

tommylink
Kokiri
*
Offline Offline

Messages: 52



Courriel
« Répondre #14 le: 14 Juillet 2013 à 14:50 »

Salut, moi j'aurais une petite question: comment faire disparaître une flêche ou un autre projectile après avoir heurter un mur(et donc arrêter son mouvement) mais pas instantanément? Je connais bien la fonction <<alarm>> mais puisqu'elle fonctionne avec le nombre de <<step>> et que mon objet et désormais immobile, il ne disparait d'aucune manière sauf, bien entendu, au contact direct du mur. J'ai essayer plusieurs choses sans succès, impossible de laisser un délais avant la destruction de l'objet.

J'utilise game maker 8.0 lite si ça peut aider. Merci  
Journalisée

moi et zelda, on ne forme qu'un.
iArcadia
Sheikah
*
Offline Offline

Messages: 4 823



Courriel
« Répondre #15 le: 15 Juillet 2013 à 17:25 »

Lorsque tu vérifies la collision avec le mur, il faut que tu mettes la vitesse de ton objet à 0, ensuite tu mets l'alarme x (x étant le chiffre que tu veux) à, par exemple, 30 (si ta room tourne à 30fps, alors ça fait une seconde d'attente). Après dans les évènements qui s'activent lors de l'alarme x, tu détruis l'instance avec instance_destroy().

Si tu n'y arrives pas, n'hésites pas à repasser par là. :)
Journalisée
tommylink
Kokiri
*
Offline Offline

Messages: 52



Courriel
« Répondre #16 le: 19 Juillet 2013 à 17:13 »

C'est justement ce que je fais depuis le début mais, comme je l'ai déjà mentionner, je connais bien la fonction <<step>>, mais elle ne fonctionne pas lorsque l'objet est préalablement arrêter. L'essayer serait peut-être le meilleur moyen pour vous de comprendre ce que je dis sans me forcer à répéter ce que j'ai déjà mentionner.  Merci quand même Zora rouge-iArcadia  mais je crois que tu n'as pas compris la problèmatique.
Journalisée

moi et zelda, on ne forme qu'un.
Morwenn
Sheikah
*
Offline Offline

Messages: 3 268


And so what?


WWW Courriel
« Répondre #17 le: 19 Juillet 2013 à 18:03 »

J'ai lu son commentaire et approuvé. S'il n'a pas compris la problématique, alors moi non plus et il va falloir trouver un moyen plus clair de l'expliquer (poster le code problématique par exemple). Quitte à répéter ce qu'il a dit, le seul truc à faire, c'est mettre dans l'évènement de collision le code suivant :
Code: [Select]
alarm[0] = 30 // ou alarm0 = 30

Puis ajouter la ligne suivante dans l'évènement alarm0 :
Code: [Select]
instance_destroy()

De ce que tu sembles dire, on dirait que tu exécutes instance_destroy() au contact avec le mur. Aussi, de ce que je comprends, tu sembles affirmer que <<step>> ne marche pas si l'objet ne bouge pas, ce qui en soi n'est vrai : <<step>> s'exécute une fois par frame tant que l'objet n'est pas détruit. Vraiment, si cette explication ne te convient, il faudra clarifier la question, sinon je doute que beaucoup comprennent^^"
Journalisée

tommylink
Kokiri
*
Offline Offline

Messages: 52



Courriel
« Répondre #18 le: 21 Juillet 2013 à 15:04 »

Tu as confirmer mon problème en fait. Pour être plus clair, je veux que ma flèche s’arrête au contact du mur et qu'elle disparaisse 1.5 seconde plus tard (45 step). Le problème c'est qu'il est impossible de le faire si l'objet est immobile. J'espère avoir été plus clair.
Journalisée

moi et zelda, on ne forme qu'un.
Morwenn
Sheikah
*
Offline Offline

Messages: 3 268


And so what?


WWW Courriel
« Répondre #19 le: 21 Juillet 2013 à 17:02 »

Il n'y a aucune raison pour que ça ne marche pas si l'objet est immobile. Si c'est la cas, c'est que tu as écrit quelque où il ne le fallait pas :P
Journalisée

tommylink
Kokiri
*
Offline Offline

Messages: 52



Courriel
« Répondre #20 le: 23 Juillet 2013 à 01:43 »

C'est impossible puisque j'utilise les actions prédéfinis. Pour la flèche, ça donne:


Collision Event with object Mur_volcan:
set Alarm 11 to 30
start moving in directions 000010000 with speed set to 0


Alarm Event for alarm 11:
destroy the instance

C'est simple mais non fonctionnel, peu importe l'ordre...
Journalisée

moi et zelda, on ne forme qu'un.
vlag67
Subrosien
*
Offline Offline

Messages: 233



WWW Courriel
« Répondre #21 le: 23 Juillet 2013 à 02:16 »

Je ne sais pas du tout comment fonctionne GM, mais à vue de nez je dirais que ta flèche reste en collision avec le mur, et que donc l'alarme est remise à l'étape 30 toutes les frames.
Journalisée
tommylink
Kokiri
*
Offline Offline

Messages: 52



Courriel
« Répondre #22 le: 23 Juillet 2013 à 15:02 »

Ce n'est pas fou, je vais essayer d’intégrer une variable anti boucle à mon objet.
Journalisée

moi et zelda, on ne forme qu'un.
vlag67
Subrosien
*
Offline Offline

Messages: 233



WWW Courriel
« Répondre #23 le: 23 Juillet 2013 à 15:15 »

Tu peux te servir de la variable speed ou direction pour faire ça, puisque de toute façon tu les assignes.
Protège juste le contenu de la fonction de collision par une condition type

Code: [Select]
if speed != 0 (sais pas comment ça se code en GML ;) )
Journalisée
Morwenn
Sheikah
*
Offline Offline

Messages: 3 268


And so what?


WWW Courriel
« Répondre #24 le: 24 Juillet 2013 à 15:00 »

Vraiment pas con Vlag, tu as sûrement raison quant au problème. Et puis ça se code à peu près exactement comme tu l'as écrit x)
Journalisée

iArcadia
Sheikah
*
Offline Offline

Messages: 4 823



Courriel
« Répondre #25 le: 25 Juillet 2013 à 14:46 »

Ah oui en effet j'avais omis le fait que l'alarme revenait à 30 frames d'attente à cause de la collision en continue. Mais j'aurai sûrement compris si j'avais testé directement sur GM. :ninja:
Journalisée
tommylink
Kokiri
*
Offline Offline

Messages: 52



Courriel
« Répondre #26 le: 01 Août 2013 à 15:46 »

Ça fonctionne, j'ai fais ce code:

Alarm Event for alarm 11:
destroy the instance

Collision Event with object Mur_volcan:
if testfleche is equal to 0
      set variable testfleche to 1
      set Alarm 11 to 15
      start moving in directions 000010000 with speed set to 0

Je ne sais pas trop comment coder la méthode que tu m'as montrée car je veut qu'il se produise la même chose peu importe la direction justement (c'est à dire s'arrêter)... . Merci pour votre aide tout le monde.
« Dernière édition: 01 Août 2013 à 15:49 par tommylink » Journalisée

moi et zelda, on ne forme qu'un.
iArcadia
Sheikah
*
Offline Offline

Messages: 4 823



Courriel
« Répondre #27 le: 01 Août 2013 à 16:13 »

A quoi correspond la variable testfleche ?
Sinon d'après ce que tu nous donnes, tu fais ton jeu en drag'n'drop ? (glisser/déposer)
« Dernière édition: 03 Août 2013 à 07:29 par Zora rouge-iArcadia » Journalisée
tommylink
Kokiri
*
Offline Offline

Messages: 52



Courriel
« Répondre #28 le: 03 Août 2013 à 04:55 »

Elle ne correspond à rien, elle est déclarer à 0 lors de sa création et ne fait qu'empêcher l'alarm de s'enclencher en boucle infini.
Mais sinon, je n'ai aucune idée de ce que tu veux dire par drag'n'drop en rapport avec mon code.
Journalisée

moi et zelda, on ne forme qu'un.
iArcadia
Sheikah
*
Offline Offline

Messages: 4 823



Courriel
« Répondre #29 le: 03 Août 2013 à 07:33 »

Mais sinon, je n'ai aucune idée de ce que tu veux dire par drag'n'drop en rapport avec mon code.
Tu utilises les boutons des fonctions prédéfinis dans Game Maker ? (ou icônes)

Sinon quel est le problème ? C'est censé fonctionner peu importe la direction que ta flèche possédait ...
Journalisée
vlag67
Subrosien
*
Offline Offline

Messages: 233



WWW Courriel
« Répondre #30 le: 03 Août 2013 à 13:29 »

Je crois qu'il veut savoir comment protéger la fonction de collision avec les variables du jeu (en l'occurence speed ici).

Relis mon dernier message, et si j'en crois Morwenn ça doit marcher out of the box ...  ^_^
Journalisée
Pages: [1] Imprimer 
Forums Zelda Solarus  |  Jeux amateurs  |  Programmation  |  Topic: GML
Aller à:  

Propulsé par MySQL Propulsé par PHP Powered by SMF 2.0.15 | SMF © 2006, Simple Machines LLC XHTML 1.0 Transitionnel valide ! CSS valide !
Zelda Solarus 2009Skin par Eidarloy
Solarus-Games