Créer et manipuler des objets

Voir le sujet précédent Voir le sujet suivant Aller en bas

Tutoriel Créer et manipuler des objets

Message par Morgan9195 le Jeu 16 Jan - 23:06



Programmer sur Script
Créer et manipuler des objets



Un objet, qu'est ce que c'est? C'est surement la première question qui vous est passé par la tête. Dans la vie de tous les jours, nous savons très bien définir ce qu'est un objet, mais en programmation, cette notion devient trouble.
Rassurez-vous, la différence n'est pas très grande. Je vais cependant quand même vous détailler cette explication avec des illustrations.

Concrètement, un objet c'est quoi?
Ca peut être des voitures, des tables, des boites, un peu de tout en fait.
En programmation, toute entité qui sont créé à partir d'un modèle est un objet.
C'est encore très abstrait pour vous mais ces images vont vous aider à comprendre.

Vous souhaitez afficher plusieurs fois cette entité dans votre programme. Au lieu de copier coller des dixaines de fois le code d'une seule entité, vous allez pouvoir le ranger dans un objet, et dessiner des copies de ce même objet sur l'écran, avec des paramètres propre à chaque copie (coordonnée, sprite, vitesse de déplacement, angle de déplacement, etc...).

Pour les personnes ayant déjà utilisé des objets dans d'autres langages de programmation:

Si vous avez programmé en C++ ou autre langage contenant des objets, vous savez surement que les variables contenus dans un objet ne sont pas accessibles dehors de l'objet. Ce n'est pas le cas sur Script, toute variable est accessible partout dans le code de votre programme.

Pour comprendre ces fonctions, vous aurez besoin de savoir maîtriser les listes.
Les listes sont des tableaux très particuliers, puisqu'ils fonctionnent un peu comme une liste d'attente. Si on supprime la valeur 2, la valeur 4 devient la valeur 3, et la valeur 3 devient la valeur 2.
L'utilisation de listes va nous être très utile pour créer des objets.
Pour vous faire aborder un aspect pratique des listes, sans rester trop dans l'aspect théorique, je vous propose de les étudier au cours de ce chapitre sur les objets.
Si vous souhaitez utiliser les listes dans un contexte différent, vous pouvez consulter la documentation de Script qui vous renseignera sur l'utilisation de chaque fonction sur les listes.

Nous allons donc créer chaque fonction une par une en étudiant son fonctionnement.

Pour commencer, comme les objets utilisent des listes, nous allons voir comment créer et supprimer une liste.
Nous allons créer une liste par paramètre. Je rappelle que les paramètres des objets sont les informations modifiables qui les rendent différents des autres objets (les coordonnées, l'apparence, l'angle, le déplacement, etc...).
La création des listes se fait au début du programme, c'est à dire dans l'event_start
(merci de faire les manipulations en même temps que moi afin de garantir une meilleure compréhension du cours)
Code:

if event_start()
{
 obj_x = ds_list_create();
 obj_y = ds_list_create();
 obj_txt = ds_list_create();
}

Dans cet exemple, les objets n'auront que trois paramètres. Les coordonnées x et y de l'objet et un texte.
La suppression de listes s'effectue à la fin du programme, dans l'event_end

Code:

if event_end()
{
 ds_list_destroy(obj_x);
 ds_list_destroy(obj_y);
 ds_list_destroy(obj_txt);
}

Nous sommes maintenant prêt à créer les différentes fonctions qui manipuleront ces objets que voici:
- create_object
- delete_object
- object_set
- object_get
- draw_object

Je vous décris le rôle qu'aura chacune de ces fonctions.
- create_object:
Créer un nouvel objet
- delete_object:
Supprimer un objet
- object_set:
Modifier un paramètre d'un objet
- object_get:
Obtenir un paramètre d'un objet
- draw_object:
Actualiser et dessiner un objet

Créez donc la première fonction, la fonction "create_object".

Rappel: Créer et exécuter vos propres fonctions

Cette fonction servira à créer un objet et l'ajouter aux listes. Pour faire cela, la fonction ds_list_add(liste,valeur); permet d'ajouter une nouvelle valeur à la suite d'une liste.
La fonction create_object contiendra alors le code suivant:
Code:

ds_list_add(obj_x, argument0);
ds_list_add(obj_y, argument1);
ds_list_add(obj_txt, argument2);
Comme vous pouvez le voir, la fonction create_object servira à ajouter les 3 paramètres du nouvel objet dans leurs listes respectives.
la fonction create_object s'utilisera donc comme ceci:
Code:

function("create_object", x, y, "texte");

Pour supprimer un objet, c'est un peu le même principe, il s'agit de la fonction delete_object.
La fonction s'utilise comme ceci:
Code:

function("delete_object", id);
Elle est constituée du code suivant:
Code:

ds_list_delete(obj_x, argument0);
ds_list_delete(obj_y, argument0);
ds_list_delete(obj_txt, argument0);
Elle supprime l'objet correspondant à l'identifiant donné. Nous allons voir par la suite comment obtenir leurs identifiants.

Nous allons maintenant créer la fonction object_set, qui permet de modifier la valeur d'un paramètre d'un objet.
Pour cela, nous allons utiliser la fonction ds_list_replace(liste, id, valeur); qui remplace la valeur d'identifiant spécifié par la valeur donnée dans la liste choisi.
Le code de cette fonction sera le suivant:
Code:

ds_list_replace(argument1, argument0, argument2);
Et la fonction s'utilisera comme ceci:
Code:

function("object_set", id, paramètre, valeur);
La fonction remplacera la valeur d'un paramètre de l'objet d'identifiant spécifié par une nouvelle valeur qu'on donne à la fonction.
Exemple:
Code:

function("object_set", 0, objet_txt, "Salut");
Ce code change la valeur du paramètre texte de l'objet d'identifiant 0 (le premier objet créé). La nouvelle valeur est "Salut".

La fonction object_get servira à obtenir la valeur d'un paramètre d'un objet.
Son code:
Code:

return ds_list_find_value(argument1, argument0);
Son utilisation:
Code:

variable = function("object_get", id, paramètre);
La valeur du paramètre précisé, de l'objet précisé, s'enregistre dans la variable.

Il reste plus qu'une fonction à créer avant de pouvoir créer et manipuler les objets, la fonction draw_object. Cette fonction va permettre d'actualiser les objets ainsi que de les dessiner.
Nous allons avoir besoin de la fonction ds_list_size(liste); qui retourne le nombre de valeurs contenu dans une liste.
Voici le code de la fonction draw_object:
Code:

// Execute le code pour chaque identifiant d'objet
for (i=0; i<ds_list_size(obj_x); i+=1)
{
 // Met les informations de l'objet dans des variables temporaires
 x_temp = function("object_get", i, obj_x);
 y_temp = function("object_get", i, obj_y);
 txt_temp = function("object_get", i, obj_txt);
 
 // Modifie les informations de l'objet (désolé, j'ai pas d'autre idée de modification plus intéressante graphiquement)
 y_temp += 1;
 
 // Sauvegarde les modifications
 function("object_set", i, obj_x, x_temp);
 function("object_set", i, obj_y, y_temp);
 function("object_set", i, obj_txt, txt_temp);
 
 // Dessine l'objet
 draw_text(x_temp,y_temp,txt_temp);
 
 // Suppression de l'objet s'il quitte la zone de l'écran (trop d'objets fait laguer)
 if (y_temp > room_height)
 {
  function("delete_object", i);
  // Comme cet identifiant est supprimé, l'identifiant doit rester le même lors de la prochaine exécution de la boucle "for"
  i -= 1;
 }
}

Voila, je vous ai mis des commentaires dans le code pour vous simplifier sa compréhension.
Mettons maintenant l'ensemble de ces codes en pratique dans le fichier program.script

Voici le code de votre program.script:
Code:

if event_start()
{
 program_name = "Script _ Exemple création et utilisation d'objets";
 
 obj_x=ds_list_create();
 obj_y=ds_list_create();
 obj_txt=ds_list_create();
}

if mouse_check_button_pressed(mb_left)
 function("create_object", mouse_x,mouse_y, get_string("Entre un texte ici:", "Texte"));

function("draw_object");

// Et pour le fun, on va afficher le nombre d'objets dans le coin de la fenêtre
draw_text(10, 10, "Nombre d'objets: " + string(ds_list_size(obj_x)));

if event_end()
{
 ds_list_destroy(obj_x);
 ds_list_destroy(obj_y);
 ds_list_destroy(obj_txt);
}

Et voila. Un jeu utilisant des objets personnalisables devient très facile à créer. Le code du fichier program.script est très simple à comprendre et ne fait que 25 lignes.

Vous pouvez utiliser des objets pour:
- Créer des balles tirées par une arme
- Créer des personnages avec déplacements et collisions
- Créer un tchat
- Créer une liste de joueurs sur un serveur de jeu multijoueur
- Créer des objets en tout genre, comme par exemple des murs
etc...

Voici quelques idées de nouveaux paramètres à ajouter:
- x
- y
- sprite
- angle
- vitesse
- nom
- code
- couleur
etc...

Si vous avez des questions ou si vous rencontrez des problèmes en utilisant des objets dans vos projets, n'hésitez pas à poser vos question.
Et n'hésitez pas à commenter le tutoriel si celui-ci vous a plu. Merci Wink




avatar
Morgan9195
Fondateur
Fondateur

Messages : 168
Date d'inscription : 11/02/2013
Age : 22
Localisation : Entre le fauteuil et le clavier

Projet(s)
Niveau de connaissances dans Script: Professionnel
Spécialité: Programmeur

Voir le profil de l'utilisateur http://morgan9195.olympe.in/devblog/

Revenir en haut Aller en bas

Tutoriel draw_2D erreur

Message par BaptisteOuille le Sam 10 Jan - 18:57

Très bon tuto mais j'ai une erreur dans le résultat final:
COMPILATION ERROR in string to be executed
Error in code at line 18:
  draw_2D();
 ^
at position 1: Unknown function or script: draw_2D
avatar
BaptisteOuille
Peu actif
Peu actif

Messages : 13
Date d'inscription : 06/01/2015
Age : 22
Localisation : Tournai

Projet(s)
Niveau de connaissances dans Script: Moyen
Spécialité: Pas vraiment de spécialité

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Tutoriel Re: Créer et manipuler des objets

Message par Morgan9195 le Dim 11 Jan - 0:35

Le tutoriel n'était pas à jour, la fonction draw_2D(); n'existe plus.
T'as juste à retirer cette ligne de ton code. Smile

(Au passage, j'ai corrigé autre chose, les fonctions fonction(); sont remplacées par function(); )

________________________________________________________________________________________
avatar
Morgan9195
Fondateur
Fondateur

Messages : 168
Date d'inscription : 11/02/2013
Age : 22
Localisation : Entre le fauteuil et le clavier

Projet(s)
Niveau de connaissances dans Script: Professionnel
Spécialité: Programmeur

Voir le profil de l'utilisateur http://morgan9195.olympe.in/devblog/

Revenir en haut Aller en bas

Tutoriel Re: Créer et manipuler des objets

Message par BaptisteOuille le Mer 14 Jan - 13:43

Et pourquoi dans le code de la fonction create_object on a les arguments 0, 1, 2 mais que dans le code de la fonction delete_object on n'a que l'argument 0 ?
avatar
BaptisteOuille
Peu actif
Peu actif

Messages : 13
Date d'inscription : 06/01/2015
Age : 22
Localisation : Tournai

Projet(s)
Niveau de connaissances dans Script: Moyen
Spécialité: Pas vraiment de spécialité

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Tutoriel Re: Créer et manipuler des objets

Message par Morgan9195 le Jeu 15 Jan - 16:46

La fonction create_object sert à créer un nouvel objet (et à le stocker quand une liste).

Lors de la création d'un nouvel objet, celui-ci à besoin de paramètres pour être unique, différent des autres objets déjà existants. Ces paramètres sont les coordonnées x et y ainsi qu'un texte.

L'objet sera donc matérialisé par un texte écrit à ces coordonnées particulières de l'écran.

Lors de la suppression d'un objet (avec la fonction delete_object), la fonction n'a pas besoin qu'on lui précise les coordonnées ainsi que le texte de l'objet pour pouvoir le supprimer.

Les objets sont stockés dans une liste, donc sont numérotés et accessibles via leur identifiant.
Pour supprimer un objet, il suffit donc de lui passer qu'un seul paramètre, l'identifiant de l'objet à supprimer.

Voilou Smile

________________________________________________________________________________________
avatar
Morgan9195
Fondateur
Fondateur

Messages : 168
Date d'inscription : 11/02/2013
Age : 22
Localisation : Entre le fauteuil et le clavier

Projet(s)
Niveau de connaissances dans Script: Professionnel
Spécialité: Programmeur

Voir le profil de l'utilisateur http://morgan9195.olympe.in/devblog/

Revenir en haut Aller en bas

Tutoriel Re: Créer et manipuler des objets

Message par BaptisteOuille le Jeu 15 Jan - 18:08

D'accord merci
avatar
BaptisteOuille
Peu actif
Peu actif

Messages : 13
Date d'inscription : 06/01/2015
Age : 22
Localisation : Tournai

Projet(s)
Niveau de connaissances dans Script: Moyen
Spécialité: Pas vraiment de spécialité

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Tutoriel Re: Créer et manipuler des objets

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum