AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le deal à ne pas rater :
Cartes Pokémon : la prochaine extension Pokémon sera EV6.5 Fable ...
Voir le deal

 

 [Tutoriel] Système de Drag and Drop en GML.

Aller en bas 
2 participants
AuteurMessage
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

[Tutoriel] Système de Drag and Drop en GML. Empty
MessageSujet: [Tutoriel] Système de Drag and Drop en GML.   [Tutoriel] Système de Drag and Drop en GML. EmptyJeu 27 Oct 2011 - 14:57

Bonjour,

Je vais vous montrer ici une façon de creer un systeme de drag en drop pour vos jeux/softs.

Exclamation je ne vous expliquerez pas les fonctions natives que j'utiliserai dans ce tutoriel, je vous laisse regarder la documentation en français où tout est assez bien expliqué, si toute fois après avoir regardé et cherché à comprendre vous ne comprenez toujours pas le fonctionnement d'une fonction n’hésitez pas à demander une explication ici même.
Lien de la documentation : http://gamemaker.info/fr/manual


Les objectifs:
- Avoir un système intuitif résumé en un seul objet.
- Avoir le moins de code possible.
- Déplacer seulement les objets définis.
- Pouvoir déplacer un objet avec la souris.

La réalisation:

Citation :

Avoir un système intuitif résumé en un seul objet.
Avoir le moins de code possible.
On va donc créer un objet qui va gérer tout le système de D&D.
On va appeler cet objet : obj_drag

Dans le Create on va définir les variables qui vont nous permettre de gérer notre système.

Code:

objet=noone;

d[0]=object0;

nbr_d =0;

objet: variable qui va nous permettre de savoir qu'elle objet on est entrain de déplacer.
d : tableau avec tout les objets qu'on peut déplacer. (dans l'exemple on ne pourra déplacer que "object0")
nbr_d : vus que GM n'a pas de fonction permettant de savoir combien on a d'entrées dans un tableau on va le faire manuellement (il suffis de rentrer le dernier index de d).

Une fois ceci fait on va pouvoir gérer le code en lui même dans un Step ou un Draw.

Code:

x=mouse_x;
y=mouse_y;

if (mouse_check_button_pressed(mb_left))
    for({var i; i=0}; i<=nbr_d; i+=1)
        if( collision_point(x,y,d[i],1,1) ){
            objet = instance_position(x,y,d[i]);
            break;
        }



if(objet!=noone && mouse_check_button_released(mb_left))
    objet=noone;

else if(objet != noone){
    objet.x= mouse_x - (xprevious-objet.x);
    objet.y= mouse_y - (yprevious-objet.y);
}

Explications :

Citation :

x=mouse_x;
y=mouse_y;
Permet d'avoir accès à "xprevious" et "yprevious" pour la souris.

Citation :

if (mouse_check_button_pressed(mb_left))
for({var i; i=0}; i<=nbr_d; i+=1)
if( collision_point(x,y,d[i],1,1) ){
objet = instance_position(x,y,d[i]);
break;
}
-Si on execute un clic gauche
-on vérifie si on est sur un objet défini dans le tableau "d".
-si c'est le cas on récupère son "id" dans la variable "objet" et on arrête de vérifier.

Citation :

if(objet!=noone && mouse_check_button_released(mb_left))
objet=noone;
Si on relâche le clic gauche on efface l'id de l'objet dans la variable "objet".

Citation :

else if(objet != noone){
objet.x= mouse_x - (xprevious-objet.x);
objet.y= mouse_y - (yprevious-objet.y);
Sinon si (tant qu'on ne relâche pas le clic gauche) on déplace l'objet identifié dans la variable "objet" vers la position de la souris.

Améliorations possibles:
-empêcher les objets de sortir de l’écran.
-empêcher de poser un objet sur un endroit interdit
-si l'objet est solide: désactiver son état "solide" pour pouvoir le déplacer librement et le réactiver par la suite.
-etc...


Mot de la fin:
Voilà, ce tutoriel s’arrête ici, j’espère avoir été assez clair et utile.


Dernière édition par Caly le Jeu 27 Oct 2011 - 15:15, édité 1 fois
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

[Tutoriel] Système de Drag and Drop en GML. Empty
MessageSujet: Re: [Tutoriel] Système de Drag and Drop en GML.   [Tutoriel] Système de Drag and Drop en GML. EmptyJeu 27 Oct 2011 - 15:13

Sympa. Clair, court et bien présenté, y a pas grand chose a redire :p

_________________
[Tutoriel] Système de Drag and Drop en GML. Runningpotato1[Tutoriel] Système de Drag and Drop en GML. TvF6GED [Tutoriel] Système de Drag and Drop en GML. MdetltS
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

[Tutoriel] Système de Drag and Drop en GML. Empty
MessageSujet: Re: [Tutoriel] Système de Drag and Drop en GML.   [Tutoriel] Système de Drag and Drop en GML. EmptyJeu 27 Oct 2011 - 15:19

Citation :
Sympa. Clair, court et bien présenté, y a pas grand chose a redire :p
Merci. Smile
Revenir en haut Aller en bas
Contenu sponsorisé





[Tutoriel] Système de Drag and Drop en GML. Empty
MessageSujet: Re: [Tutoriel] Système de Drag and Drop en GML.   [Tutoriel] Système de Drag and Drop en GML. Empty

Revenir en haut Aller en bas
 
[Tutoriel] Système de Drag and Drop en GML.
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Drag and Drop TO Gml
» [C++] Couper et Drag&Drop
» Tutoriel : Systeme de duel
» [Tutoriel] Le système de particules de GM
» Exemple: Drag&Fly

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