| Atelier GML 1 - Fonctions et variables | |
|
|
|
Auteur | Message |
---|
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Atelier GML 1 - Fonctions et variables Ven 9 Sep 2011 - 14:42 | |
| Atelier GML 1 Fonctions et variables Voici le premier atelier GML. Ici vous apprendrez a utiliser fonctions et variables avec des nombreux exercices. Le but des ateliers est la pratique afin de ne pas rester trop longtemps sur la théorie. Si vous voulez approfondir les parties théoriques de cet atelier, lisez ce Tutoriel. Les fonctionsUn peu de théorieLes fonctions sont la base de GM. Elles permettent de faire de nombreuses choses comme afficher une image a l'écran, montrer une erreur, jouer un son. GM possède des fonctions un peu pour tout. Si vous voulez avoir un aperçu de toutes les fonctions disponibles vous pouvez aller dans Script->Show built-in functions. Une fonction s'utilise toujours de la même manière. Déjà on écrit son nom, et ensuite on écrit les paramètres entre parenthèses, séparés par des virgules. Une fonction peut renvoyer une valeur, comme quand on fait des mathématiques. Par exemple sqrt(4) renverras 2 (racine carré de 4). Syntaxe : nom_de_la_fonction ( 1er parametre, 2eme parametre, ... ) Si vous voulez des informations sur une fonction particulière, utilisez la documentation de GM. En pratiquePour débuter avec les fonctions, le mieux est d'utiliser des fonctions de dessin. Celles ci s'utilisent dans l'event draw d'un objet. Les fonctions de dessin commencent toutes par draw. Quelques fonctions : draw_set_color( couleur ) : permet de choisir une couleur de dessin draw_text(x, y, string) : permet d'afficher la chaine de caractère string a la position (x;y) draw_circle(x, y, r, outline) : permet d'afficher un cercle en (x;y), de rayon r. outline définis si on dessine juste le contour ou non. draw_line(x1, y1, x2, y2) : trace une ligne partant de (x1;y1) jusqu'à (x2;y2) Exemple, le Hello World : A mettre dans le draw event d'un objet - Code:
-
draw_text(16, 16, "Hello World") Les "" définissent une chaine de caractère. Plus de détails a la suite -> Les variablesUn peu de théorieUne variable permet d'associer un nom a une valeur. Ainsi si j'écris : - Code:
-
p = 16 text = "Salut" draw_text(p, p, text) alors Salut seras écrit en haut a gauche de l'écran. Un variable peut contenir soit un nombre réel, soit une chaine de caractère. Dans l'exemple ci dessus p contient le nombre 16, et text la chaine de caractère Salut (on appelle ça un string). Quand vous créez une variable, elle a aussi une porté limitée a l'objet ou vous la créez. Donc si vous écrivez text = "Salut" dans un objet, et draw_text(16, 16, text) dans un autre objet, alors il y auras une erreur. Il est possible d’accéder a la variable text d'un autre objet, mais ceci ne seras pas vu dans cet atelier. Vous pouvez aussi créer une variable locale a un bloc d'instruction, mais on en parleras plus en détail dans l'atelier suivant. (inutile pour l'instant) En pratiqueChaque objet possède des variables locales prédéfinies, comme x et y qui permettent de récupérer la position ou il a été placé dans la room. Pour voir toutes les variables locales, allez dans Scripts->Show built-in variables. Les variables locales sont celles précédées par "local:" Ainsi si vous modifiez x et y, vous pouvez déplacer votre objet. Par exemple, vous pouvez déplacer votre objet a la position de la souris : - Code:
-
x = mouse_x y = mouse_y Ou faire aller votre objet a droite si vous appuyez sur espace : - Code:
-
x += keyboard_check(vk_space) infos : x += n est l'équivalent de x = x + n Fichier d'exempleExercices Merci de poster vos réponses aux exercices en spoiler 1 - Hello worldAffichez le texte Hello World parfaitement au centre de l'écran, quelque soit la taille de la room. 2 - Bouge, bouge mon petit carré !Faites un objet carré qui se déplace dans la bonne direction si vous appuyez sur une des touches 'Flèches' du clavier. 3 - Petit carré a trop bu.Cette fois, faite bouger le petit carré aléatoirement. Attention, petit carré ne sais pas se téléporter (en gros s'il est a la position 16, 16 il ne peut pas se retrouver instantanément a l'autre bout de la room) 4 - Pour les petits matheux.Faites ce déplacer un cercle en utilisant des fonctions trigonométriques. Gauche et droite pour changer la direction, haut et bas pour avancer et reculer. Ce mode de déplacement sert dans les jeux de tirs 2d avec vue de dessus. IndicesPour réussir chacun des exercices, il va falloir trouver les fonctions/variables locales appropriées dans la documentation. Si vraiment vous êtes mauvais, et que vous ne trouvez pas, voici en spoiler leurs noms : 1. - Spoiler:
Alignement du texte : draw_set_halign Taille de la room : room_width et room_height
2. - Spoiler:
Utilisez la fonction keyboard_check. Les constantes associés aux fleches sont vk_left, vk_right, vk_up et vk_down
3. - Spoiler:
La fonction aléatoire se nomme random. Remplacez les keyboard_check de l'exercice précédent par des random
4. - Spoiler:
La fonction lenghdir_x(len, dir) correspond a cos(dir*pi/180) * len
Tout cela etait trop simple ? Rendez vous a l'atelier 2 !
Dernière édition par onilink_ le Sam 10 Sep 2011 - 14:18, édité 1 fois |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Atelier GML 1 - Fonctions et variables Ven 9 Sep 2011 - 15:21 | |
| Le premier atelier est finis. N'hésitez pas a flooder de questions/remarques/suggestions si elles on un rapport avec l'atelier, et n'oubliez pas de poster vos réponses aux exercices en spoiler. Vous pouvez aussi proposer de nouveaux exercices (bien qu'a mon avis j'ai fait le tour la). Aussi je ne ferais d'autres ateliers que s'il y a un minimum de 'participation'. (Tant qu'a faire des trucs utiles quoi) Bonne chance |
|
| |
Qual Utilisateur confirmé: Rang ****
Messages : 1450 Projet Actuel : Tower Defence
| Sujet: Re: Atelier GML 1 - Fonctions et variables Ven 9 Sep 2011 - 20:22 | |
| c'est a ca que tu perd ton temps au lieu de mater the mentalist ? _________________ |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Atelier GML 1 - Fonctions et variables Ven 9 Sep 2011 - 20:23 | |
| Tkt je fait les deux a la fois |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: Atelier GML 1 - Fonctions et variables Ven 9 Sep 2011 - 20:26 | |
| - Spoiler:
Sans un draw_set_valign() le text ne sera pas parfaitement au centre
_________________ Home is not a place, it's a feeling.
|
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Atelier GML 1 - Fonctions et variables Ven 9 Sep 2011 - 20:36 | |
| Spoiler pour les trucs comme ça plz.
Sinon ouai mais je donne juste des indices. Pas la solution complète quoi :p |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: Atelier GML 1 - Fonctions et variables Ven 9 Sep 2011 - 20:56 | |
| Ah oui, pardon. M'enfin, à ta place j'aurais donné l'autre, c'est pas facile de voir si un texte est centré verticalement par rapport à toute une room en général :p _________________ Home is not a place, it's a feeling.
|
|
| |
marty Utilisateur confirmé: Rang ***
Messages : 697 Projet Actuel : laby-ereinte !
| Sujet: Re: Atelier GML 1 - Fonctions et variables Ven 9 Sep 2011 - 22:48 | |
| super l'atelier! premier exercice je me suis dit facile et comme de juste il s'affiche au milieu décaler sur la droite de la taille du texte je bidouille et finalement j'ouvre le spoiler! - Spoiler:
draw_set_halign(fa_center) draw_set_valign(fa_middle) draw_text(room_width/2,room_height/2,"hello world")
je cherchais une solution avec la longueur de la string et la soustraire des coordonnées du milieu de room!
Dernière édition par marty le Ven 9 Sep 2011 - 23:52, édité 4 fois |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Atelier GML 1 - Fonctions et variables Ven 9 Sep 2011 - 23:08 | |
| La doc y a que ça de vrai Sinon c'est bon, go faire le 2ieme exo :p |
|
| |
marty Utilisateur confirmé: Rang ***
Messages : 697 Projet Actuel : laby-ereinte !
| Sujet: Re: Atelier GML 1 - Fonctions et variables Ven 9 Sep 2011 - 23:51 | |
| exercice deux: j'utilise un draw pour afficher un rectangle le rectangle se dédouble quand il bouge pourquoi? - Spoiler:
draw_rectangle(x,y,x+30,y+30,1)
x-=keyboard_check(vk_left) x+=keyboard_check(vk_right) y-=keyboard_check(vk_up) y+=keyboard_check(vk_down) exercice trois: un random avec les coordonnées me semblait bien puis finalement j'ai utilisé autre chose! - Spoiler:
motion_set(random(360),1)
un peu brouillon comme déplacement exercice quatre: un petit casse tête non résolu ! - Spoiler:
if keyboard_check(vk_left){direction+=1} if keyboard_check(vk_right){direction-=1} if keyboard_check(vk_up){x+=lengthdir_x(1,direction); y+=lengthdir_y(1,direction)} if keyboard_check(vk_down){x-=lengthdir_x(1,direction); y-=lengthdir_y(1,direction)}
la direction ne varie pas pourquoi? (j'ai testé dans le draw et dans le step) |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Atelier GML 1 - Fonctions et variables Sam 10 Sep 2011 - 0:01 | |
| - marty a écrit:
- j'utilise un draw pour afficher un rectangle le rectangle se dédouble quand il bouge pourquoi?
Chez moi ça fonctionne nickel. - marty a écrit:
- la direction ne varie pas pourquoi? (j'ai testé dans le draw et dans le step)
Encore une fois tout fonctionne (regarde avec un draw_text(16, 16, direction)) Par contre si le sprite ne tourne pas c'est normal, pour ça il faut utiliser image_angle. Ben t'as finis les exos :p J'en ferais peut être d'autres demain alors :p ps : essaye de faire le dernier exo sans utiliser de if si tu veux t'entrainer :p |
|
| |
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: Atelier GML 1 - Fonctions et variables Sam 10 Sep 2011 - 0:10 | |
| Ah lala, toute cette patience pour faire ça Je surveille ce sujet, c'est intéressant _________________ Because these are not the words of God, the same God that burnt the knowing.
|
|
| |
marty Utilisateur confirmé: Rang ***
Messages : 697 Projet Actuel : laby-ereinte !
| Sujet: Re: Atelier GML 1 - Fonctions et variables Sam 10 Sep 2011 - 11:06 | |
| ça fonctionne,la direction change c'est vrai que +1 ne se voit pas tout de suite! le premier exercice permettrai de faire un écran titre,manque plus qu'une petite animation! (un draw scale ou autre) le deuxième la base! les contrôles clavier le troisième déplacement d'un ennemie AI niveaux 0.1 le quatrième utilisation du lenghtdir ,déplacement amélioré! pour finir fabriquer un jeu avec les notions vues précédemment!c'est ça l'idée pour apprendre à créer des jeux en gml et non faire croire que tu peux réaliser un casse brique en 2 min,jeu pour lequel tu sera déçu car la gestion de collision de la raquette balle est foireuse! vive le et merci à onilink pour son dévouement! (vivement une refonte du site qu'on mette en avant ce qui doit l'être!) |
|
| |
Qual Utilisateur confirmé: Rang ****
Messages : 1450 Projet Actuel : Tower Defence
| Sujet: Re: Atelier GML 1 - Fonctions et variables Sam 10 Sep 2011 - 12:29 | |
| monsieur anti GM tu devrais faire des exercice comme ca pour le C++, ou bien pour Onidev _________________ |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Atelier GML 1 - Fonctions et variables Sam 10 Sep 2011 - 12:34 | |
| Jle ferais, mais quand Onidev seras finis. Pis faut bien initier les débutants avec de la fausse prog (se mettre directement au c++ ça serais un peu chaud pour certains) Sinon content que ça te plaise Marty :p D'ailleurs Qual. Tu dit ça mais jsuis sur que tu serais pas fichu de faire les exercices (surtout ceux que je prépare pour le 2ieme atelier) |
|
| |
marty Utilisateur confirmé: Rang ***
Messages : 697 Projet Actuel : laby-ereinte !
| Sujet: Re: Atelier GML 1 - Fonctions et variables Dim 11 Sep 2011 - 15:01 | |
| salut,comment détruire un objet sans sprite avec un draw rectangle comme image lorsqu'il rencontre un autre objet sans sprite avec un draw comme image?
j'ai utiliser cette fonction:if (collision_rectangle(x,y,x+20,y+20,adv1,1,1)) {vie=0}
la variable vie permettant l'affichage du rectangle dans l'event draw (si vie =1 draw rectange)
j'ai testé instance_destroy() sans succés
merci! |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Atelier GML 1 - Fonctions et variables Dim 11 Sep 2011 - 15:42 | |
| Tu peut faire un truc tout simple, c'est utiliser un mask qui a la dimension de ton draw. |
|
| |
marty Utilisateur confirmé: Rang ***
Messages : 697 Projet Actuel : laby-ereinte !
| Sujet: Re: Atelier GML 1 - Fonctions et variables Dim 11 Sep 2011 - 15:55 | |
| en fait le problème dans son ensemble c'est que la taille du rectangle ennemie est changeante au cours du"jeu"(test) . je suis parti de l'idée d'évité les carrés de l'exercice et je m'amuse à décliner les différentes possibilités de jeu (un room qui rétrécie et qui concentre le joueur avec les carrés au mouvement random,ou encore les carrés ennemies qui grossissent..) en bref jouer avec toute les variables de base! et finalement c'est pas si simple sans sprite! |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Atelier GML 1 - Fonctions et variables Dim 11 Sep 2011 - 16:00 | |
| A mon avis tu peut utiliser sprite_set_bbox pour modifier la taille du mask. |
|
| |
marty Utilisateur confirmé: Rang ***
Messages : 697 Projet Actuel : laby-ereinte !
| Sujet: Re: Atelier GML 1 - Fonctions et variables Dim 11 Sep 2011 - 18:38 | |
| ça fonctionne mais donne le double de travail! je voulais resté dans le faisable par les novices! merci |
|
| |
stermi59 Débutant
Messages : 24 Localisation : Nord Projet Actuel : Apprendre
| Sujet: Re: Atelier GML 1 - Fonctions et variables Jeu 29 Mar 2012 - 20:04 | |
| exo 1 : - Spoiler:
draw_set_halign(fa_center) draw_set_valign(fa_middle) draw_text(room_width/2,room_height/2,"Hello World")
exo 2 : - Spoiler:
x+=keyboard_check(vk_right) x-=keyboard_check(vk_left) y+=keyboard_check(vk_down) y-=keyboard_check(vk_up)
exo 3 : - Spoiler:
if keyboard_check (vk_right) || keyboard_check (vk_left) || keyboard_check (vk_down) || keyboard_check (vk_up) { speed = 3 direction += random(360) } else speed = 0
exo : 4 - Spoiler:
if keyboard_check(vk_right) {direction +=1}
if keyboard_check(vk_left) {direction -=1}
if keyboard_check(vk_up) {speed = 5}
if keyboard_check(vk_down) {speed = -5}
if !keyboard_check(vk_down) && !keyboard_check(vk_up) {speed = 0}
Dernière édition par stermi59 le Jeu 29 Mar 2012 - 23:15, édité 1 fois |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Atelier GML 1 - Fonctions et variables Jeu 29 Mar 2012 - 21:37 | |
| Tout a l'air de fonctionner :b Par contre dans l'exo 3 ta variable mouvement est inutile. Pour le 4, si tu veux un peu plus de difficulté, essaye de faire ça manuellement, sans utiliser speed et direction (mais avec lengthdir_x et y) |
|
| |
stermi59 Débutant
Messages : 24 Localisation : Nord Projet Actuel : Apprendre
| Sujet: Re: Atelier GML 1 - Fonctions et variables Jeu 29 Mar 2012 - 23:20 | |
| Pour l 'exo 3 , j 'avais oublier de l 'enlever la variable mouvement je l 'avais créer pour changer la valeur de speed , mais je me suis rendu compte que c'était inutile.(j'ai édité mon mon message. Pour l 'exo 4 , j 'aimerai bien utilisé lengthdir_x et y , mais je ne comprend pas ce que sa signifie et faire du copier collé bêtement ne m'intéresse pas trop. Quand j'en saurai plus j'essairai. |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Atelier GML 1 - Fonctions et variables Ven 30 Mar 2012 - 0:09 | |
| En fait les lengthdir te permettent de représenter des coordonnées d'une manière différente de celle habituelle (largeur, hauteur -> x, y). Ils permettent de représenter un point sur un cercle en fonction d'un rayon et d'un angle.
Par exemple, pour un rayon de 2, et un angle de 0, tu auras x=2;y=0 Pour un rayon de 5, et un angle de 90 -> x=0;y=-5 [...]
Bref, par exemple pour tracer un cercle, il te suffit d'afficher des points en faisant varier un angle : for(angle=0; angle<360: angle+=1) draw_point(x+lengthdir_x(rayon, angle), y+lengthdir_x(rayon, angle))
|
|
| |
stermi59 Débutant
Messages : 24 Localisation : Nord Projet Actuel : Apprendre
| Sujet: Re: Atelier GML 1 - Fonctions et variables Ven 30 Mar 2012 - 16:16 | |
| exo 4 - Spoiler:
create --> angle =0 rayon = 4
step--> // limitte angle if angle = 360 && keyboard_check(vk_left) {angle = 0}
if angle = 0 && keyboard_check(vk_right) {angle = 360}
if keyboard_check(vk_left) && angle <= 359 {angle+=1}
// variation angle if keyboard_check(vk_right) && angle >= 1 {angle-=1}
// mouvement if keyboard_check(vk_up) { x+=lengthdir_x(rayon,angle) y+=lengthdir_y(rayon,angle) }
if keyboard_check(vk_down) { x-=lengthdir_x(rayon,angle) y-=lengthdir_y(rayon,angle) }
par contre pour ton exemple censé représenter un cercle sa à mis çà - Spoiler:
COMPILATION ERROR in code action Error in code at line 1: for(angle=0; angle<360: angle+=1) ^ at position 23: Unexpected symbol in expression.
j'ai trouvé l 'erreur de symbol en remplaçant : par ; mais sa me dessine une ligne droite ?? - Spoiler:
|
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: Atelier GML 1 - Fonctions et variables Ven 30 Mar 2012 - 16:46 | |
| Oni il est dans le pâtéééééé. - Citation :
- for(angle=0; angle<360; angle+=1)
draw_point(x+lengthdir_x(rayon, angle), y+lengthdir_y(rayon, angle)) Accessoirement, ça ne marchera pas pour des grands cercles puisque ça trace des points séparés et non des segments. Je te laisse regarder du côté des draw_primitive ;) _________________ Home is not a place, it's a feeling.
|
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Atelier GML 1 - Fonctions et variables Ven 30 Mar 2012 - 16:49 | |
| Ah oui autant pour moi, j'ai mis deux fois lenghtdir_x x) for(angle=0; angle<360; angle+=1) draw_point(x+lengthdir_x(rayon, angle), y+lengthdir_y(rayon, angle)) Sinon pour l'exo 4, tu pourrais te simplifier la vie a l'aide du modulo, noté mod : - Spoiler:
if(keyboard_check(vk_left)) angle = (angle+1) mod 360 if(keyboard_check(vk_right)) angle = (angle+360-1) mod 360
Edit: Même pas vu ton poste Deezee x) Je suis doublement dans le pâté ahah x) |
|
| |
stermi59 Débutant
Messages : 24 Localisation : Nord Projet Actuel : Apprendre
| Sujet: Re: Atelier GML 1 - Fonctions et variables Ven 30 Mar 2012 - 17:51 | |
| Pour le y , j 'aurai pu le voir avec un peu plus d'attention en tout cas merci. Si non pour le draw_primitive j ' y pige rien ? Et un gros merci pour le modulo |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: Atelier GML 1 - Fonctions et variables Ven 30 Mar 2012 - 18:28 | |
| draw_primitive_... est un set de fonctions vachement puissant :) Tu fais d'abord: - Code:
-
draw_primitive_begin(type); en spécifiant la manière dont doivent être liés les points (vertices, singulier : vertex). pr_linelist : les points sont liés deux par deux par des segments. Ça te permet de définir une liste de segments en fait. pr_linestrip : chaque point est lié au précédent. Ça permet de tracer une ligne continue. pr_trianglelist : les points sont liés trois par trois par des triangles pleins. pr_trianglestrip : chaque point est lié aux deux précédents, ce qui donne une frise de triangles. pr_trianglefan : le premier point est commun à tous les triangles, et les points suivants sont deux par deux. Si tu place le premier point au centre, et 8 points autour en cercle, tu as le logo d'Umbrella Corp. :D Ensuite, la liste de points à proprement parler. - Code:
-
draw_vertex(...) Ça, c'est pour ajouter un vertex par défaut, c'est-à-dire sans texture et avec la couleur courante (draw_set_color(...)). - Code:
-
draw_vertex_color(...) Là, tu donnes une couleur au vertex. Comme les couleurs sont sur les sommets de ta forme, les lignes ou les triangles se remplissent en dégradé si tu fais des sommets de couleur différente :D - Code:
-
draw_vertex_texture(...) Vertex texturé. En plus de la position du vertex à l'écran, tu donnes le point de la texture auquel il correspond (en fraction de la taille totale de la texture). En définissant correctement ces vertex, la texture est étirée dessus comme une toile sur un cadre. Et enfin, fermer la liste de vertices et afficher tout ce bazar : - Code:
-
draw_primitive_end() Voilou :) _________________ Home is not a place, it's a feeling.
|
|
| |
stermi59 Débutant
Messages : 24 Localisation : Nord Projet Actuel : Apprendre
| Sujet: Re: Atelier GML 1 - Fonctions et variables Ven 30 Mar 2012 - 19:12 | |
| Merci beaucoup pour l ' info - Spoiler:
avec un rayon de 150 avant: aprés :
|
|
| |
Contenu sponsorisé
| Sujet: Re: Atelier GML 1 - Fonctions et variables | |
| |
|
| |
| Atelier GML 1 - Fonctions et variables | |
|