onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: [Tutoriel][GML] Objets et instances Mar 7 Juin 2011 - 17:34 | |
|
Apprendre le GML
Objets et instances
Sommaire- Objets, instances
- Événements
- Gérez vos instances
- Optimisation
1. Objets, instances
Bon, maitriser le gml c'est bien beau mais par ou commencer maintenant ? Et bien la base, pour faire un jeu est la maîtrise des objets et de leurs instances.
Instance ? Kezako ? En programmation une instance est simplement une copie d'un objet. Imaginez que vous faites un jeu de tir, et bien quand le joueur va presser la détente il créeras une instance de l'objet balle (par exemple). De ce fait avec un seul modèle on peut créer nos différentes copies et les faire agir plus au moins différemment (même si elles aurons toutes a peut près le même comportement).
Bon avant de manipuler les instances, il faut être capable de créer et modifier des objets. Un objet est un conteneur symbolique englobant états, caractéristiques et comportements. Sous GM un objet contient des attributs (nom qui fait plus pro pour parler des variables) et des méthodes (pareil pour ce qui est fonctions, donc events sous GM).
Pour créer un objet (si vous ne le savez pas déjà...) il suffit de faire un clic droit avec la souris sur la section objet et faire Add object. Il est aussi possible d'utiliser le raccourcis Ctrl+Alt+O
Maintenant vous pouvez instancier votre objet dans une room. Pour cela créez en une, choisissez un objet et créez des instances avec le clic gauche de la souris. Les instances aurons alors leurs coordonnées stockés dans leurs variables locales x et y. Vous pouvez aussi leur définir un code de départ en faisant Ctrl+Clic gauche -> Creation code. Vous pouvez aussi voir l'id de chaque instance qui est affiché dans la barre d'état de la fenêtre de la room.
2. Événements
Un objet tel quel est totalement inutile. Il va falloir lui ajouter des events pour qu'il puisse interagir avec d'autres objet, dessiner a l'écran, etc. Pour ajouter un event cliquez sur le bouton 'Add event' et choisissez l'event que vous souhaitez.
Voici une liste des différents évents existant sous GM, et leur utilité :
-Create Create est un événement d'initialisation. Il ne s’exécute qu'une seule fois lors de la création de l'instance de l'objet. Vous pourrez y initialiser vos variables, et faire les actions prioritaires et uniques.
-Step Cet event possède 3 priorités distinctes (dans l'ordre) : begin step, step et end step. C'est un event qui s’exécutera a chaque 'pas' du jeu, il est donc incontournable si votre jeu possède des éléments dynamiques.
-Draw L'event de dessin, et aussi le plus important. Il est théoriquement possible de simuler tous les autres event dans seulement celui-ci. Vous pourrez y utiliser toutes les fonctions draw sans qu'elles soient effacées par le rafraichissement automatique de l'écran qui a lieu chaque step. Cet event est prioritaire sur step.
-Destroy Event qui se produit lorsque l'instance est détruite. Permet de faire de placer les effets d'explosion, gain de score, etc...
-Alarm Event qui se lanceras une fois que le chrono lancé avec la variable alarm[n] (ou n est le numéro de l'alarme lancée) tomberas a zéro. Son fonctionnement est tous bête. Si la variable alarm[n]>0, a chaque step elle se décrémente de 1. Si vous voulez désactiver une alarme donnez lui une valeur négative.
-Collision Cet event est déclenché quand votre instance entre en collision avec un instance de l'objet choisi. Vous pouvez récupérer l'id de l'instance percuté avec le mot clé other.
-Keyboard Event qui se déclenche pendant l'appuie de la touche choisie. Peut être remplacé par la fonction keyboard_check(key)
-Mouse ->Left button, right, middle L'event ce déclenche tant que l'objet est pressé par la souris avec le bouton choisis. ->Pressed Ne se déclenche qu'une fois lors de la pression du bouton de la souris choisis sur l'objet. ->Released De même mais quand le bouton est relâché. ->mouse enter S'active quand la souris arrive sur l'objet. ->Mouse leave S'active quand la souris quitte l'objet. ->Wheel up/down S'active quand la molette est utilisée. ->Global Tout comme les event Button, Pressed button et Released button mais fonctionne même si la souris n'est pas sur l'objet. ->joystick Permet l'utilisation de joysticks
-Other ->Outside room S'enclenche lorsque l'objet sort de la room. ->Intersect boundary S'enclenche lorsque l'objet touche un bord de la room. ->Game start S'enclenche une seule fois, si le jeu viens d'être lancé. ->Game end S'enclenche quand la fonction game_end() a été utilisé, ou le jeu arrêté normalement. ->No more lives S'enclenche quand la variable globale prédéfinie de GM : lives arrive a zéro. ->No more health S'enclenche quand la variable globale prédéfinie de GM : health arrive a zéro. ->Animation end S'enclenche si vous utilisez les variables locales prédéfinies image_speed, image_index, et que image_index atteins la valeur du nombre d'images du sprite sprite_index ->End of path Si vous avez lancé une fonction permettant de faire suivre un path (chemin) a un objet et que celui-ci arrive a la fin du chemin l'event est enclenché. ->User defined Events très très pratiques. Se sont en fait des events que vous pourrez ensuite appeler n'importe ou dans l'objet a la manière d'une fonction sans paramètres. Il faut utiliser la fonction event_user(n) pour cela.
-Key press S'enclenche une fois lorsque la touche sélectionnée est pressée. Vous pouvez utiliser a la place la fonction keyboard_check_pressed(key).
-Key release S'enclenche une fois lorsque la touche sélectionnée est relachée. Vous pouvez utiliser a la place la fonction keyboard_check_released(key).
3. Gérez vos instances
Créer un instance Instancier dans l'éditeur de room c'est bien beau, mais s'il n'existait que ce moyen on aurais un nombre d'instances constant. Pas super super... Heureusement il existe une fonction spécialement conçue pour instancier : instance_create(x, y, objet) Cette fonction crée une instance de l'objet choisis et lui passe les coordonnées entrés en paramètres dans ses variables locales x et y. L'id de l'instance ainsi crée est renvoyé par la fonction. De ce fait une fois qu'une instance est crée vous pouvez la manipuler depuis le code de création de celle-ci.
Voici une exemple de création d'instance, ainsi que manipulation d'un de ces attributs : - Code:
-
ins = instance_create(32, 32, object0) ins.vie = 20
Détruire une instance
Maintenant il se peut qu'il faille détruire une certaine instance. Pour cela il existe la fonction instance_destroy(). Malheureusement elle ne possède pas de paramètre et détruit l'instance ou elle est appelée. Il existe un moyens de détruire une autre instance du moment ou l'on connais son id de cette manière : - Code:
-
with(ins) instance_destroy()
Vous pouvez aussi utiliser le mot clé all pour détruire toutes les instances.
Trouver une instance
Les identifiants d'instances sont stockées dans des tableaux (un pour chaque objet) et il est possible d'y accéder avec la fonction instance_find(obj, n) qui renvoie l'id de la n ieme instance de l'objet obj. Pour savoir le nombres d'instances existantes d'un objet, il existe la fonction instance_number(obj)
Voici un code qui affiche les identifiants de chacune des instance de object0 - Code:
-
for(i=0; i<instance_number(object0); i+=1) draw_text(16, 16*i, instance_find(object0, i))
D'autre fonctions permettent de trouver une instance en fonctions de certains critères :
instance_nearest(x, y, obj) : renvoie l'id de l'instance d'obj la plus proche des coordonnées entrés en paramètres. Si ce code est utilisé dans une instance d'obj, elle est elle aussi prise en compte lors de la recherche.
instance_furthest(x, y, obj) : de même mais pour l'instance la plus éloignée.
instance_exists(obj) : revoie 1 si une instance de obj existe, 0 sinon.
instance_place et instance_position : a utiliser pour la détection des collisions <a préciser>
4. Optimisation
Comme vous l'imaginez, plus vous créerez d'instances et plus le jeu demanderas de perfs. Il existe un moyen d'optimiser considérablement les perfs d'un jeu si celui ci contient beaucoup d'instances, la désactivation d'instances. Il est possible d'activer/désactiver des instances. Ainsi une instance désactivée ne se verras pas son code exécuté. De plus même si l'instance ne contient pas de code, du code par défaut seras exécuté, donc on y gagneras quand même.
Désactiver/Activer des instances
Il n'existe pas de code pour traiter une seule instance dans cette situation. Vous pouvez activer/desactiver toutes les instances d'un objet avec les fonctions instance_deactivate_object(obj) et instance_activate_object(obj) La fonction instance_activate_all() permet d'activer toutes les instances. Vous pouvez aussi activer-désactiver les instances d'une certaine région avec instance_deactivate_region et instance_activate_region.
De ce fait il est possible de coder une fonction qui optimiseras le jeu en désactivant les instances en dehors de l'écran : - Code:
-
instance_activate_all(); instance_deactivate_region(view_xview[0],view_yview[0], view_wview[0],view_hview[0],false,true);
Voila voila, c'est la fin de ce tutoriel (enfin probablement). Si vous avez des questions on suggestions n’hésitez pas a poster
Dernière édition par onilink_ le Dim 22 Avr 2012 - 22:22, édité 2 fois |
|
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [Tutoriel][GML] Objets et instances Mar 7 Juin 2011 - 18:25 | |
| Voila le tuto est finis. Si j'ai omis quelque chose n'hésitez pas a me le signaler :p Sur ce je vous quitte (le tonnerre gronde j'ai pas envie de voir mon gentil pc chopper un coup de foudre lol) |
|
[TheDarkTiger] Modérateur
Messages : 7420 Localisation : Essonne
| Sujet: Re: [Tutoriel][GML] Objets et instances Sam 18 Juin 2011 - 19:41 | |
| Je me suis permis de le passer en post it ^^ Merci à toi de la part des débutants (ça n'empêche pas les lecteurs de le remercier eux même aussi bien entendu) |
|
Contenu sponsorisé
| Sujet: Re: [Tutoriel][GML] Objets et instances | |
| |
|