AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment : -29%
DYSON V8 Origin – Aspirateur balai sans fil
Voir le deal
269.99 €

 

 [Tutoriel][GML] Objets et instances

Aller en bas 
2 participants
AuteurMessage
onilink_
Modérateur
onilink_


Messages : 9183
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Tutoriel][GML] Objets et instances Empty
MessageSujet: [Tutoriel][GML] Objets et instances   [Tutoriel][GML] Objets et instances EmptyMar 7 Juin 2011 - 17:34


Apprendre le GML

Objets et instances


Sommaire
  1. Objets, instances
  2. Événements
  3. Gérez vos instances
  4. 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 Wink



Dernière édition par onilink_ le Dim 22 Avr 2012 - 22:22, édité 2 fois
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9183
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Tutoriel][GML] Objets et instances Empty
MessageSujet: Re: [Tutoriel][GML] Objets et instances   [Tutoriel][GML] Objets et instances EmptyMar 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)
Revenir en haut Aller en bas
[TheDarkTiger]
Modérateur
[TheDarkTiger]


Messages : 7420
Localisation : Essonne

[Tutoriel][GML] Objets et instances Empty
MessageSujet: Re: [Tutoriel][GML] Objets et instances   [Tutoriel][GML] Objets et instances EmptySam 18 Juin 2011 - 19:41

Je me suis permis de le passer en post it ^^

Merci à toi de la part des débutants Wink
(ça n'empêche pas les lecteurs de le remercier eux même aussi bien entendu)
Revenir en haut Aller en bas
http://www.tdms.fr
Contenu sponsorisé





[Tutoriel][GML] Objets et instances Empty
MessageSujet: Re: [Tutoriel][GML] Objets et instances   [Tutoriel][GML] Objets et instances Empty

Revenir en haut Aller en bas
 
[Tutoriel][GML] Objets et instances
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Résolu] Plusieurs objets d'un objet en plusieurs objets
» [Tutoriel] GML vs D&D
» [Tutoriel] 'FOR'
» [Tutoriel] Pong
» [Tutoriel] Ftp Dll

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Game Maker-
Sauter vers: