AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment : -24%
PC Portable Gaming 15.6″ Medion Erazer Deputy ...
Voir le deal
759.99 €

 

 Gestions des touches.

Aller en bas 
3 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.

Gestions des touches. Empty
MessageSujet: Gestions des touches.   Gestions des touches. EmptyVen 10 Fév 2012 - 12:24

Je vais vous montrez ici comment je procède pour gérer mes touches avec une visions "modulaire" qui me permet de changer les touches comme bon me semble sans rien à avoir à changer dans mon code.

Pour ce faire j'utilise un objet dit "à tout faire" et deux scripts.
Cet objet va s’appeler 'System' (il me permet dans mes projets de stocker des variables importantes dans ses instances).
On créer donc 'System' en persistant, en non visible et en non solide.
Et on ne met rien du tout dedans.

Pour les script on va crée le premier qui va nous servir à gérer non variables constantes grâce à 'System'.

defineConstants
Code:
globalvar C;
    C=instance_create(x,y,System);

with( C ){   

//Definition des Touches
    key_left = vk_left;
    key_right = vk_right;
    key_down = vk_down;
    key_jump = vk_up;
    key_action = mb_left;

//Definition des atributs pour la gestion des touches.
    pressed=0;
    check=1;
    released=2;   

}

Si vous avez bien suivi vous avez compris qu'on va utiliser nos constantes comme suit:"C.key_action".


On va donc maintenant s’occuper du script qui va gérer toutes les pression de touches, qu'il s'agisse du clavier ou de la souris.

key
Code:
if( argument0==mb_none or argument0==mb_left or argument0==mb_middle or argument0==mb_right )
  switch(argument1){
        case C.pressed : return mouse_check_button_pressed(argument0); break;
        case C.check : return mouse_check_button(argument0); break;
        case C.released : return mouse_check_button_released(argument0); break;
        default: return 0;
    }
else
    switch(argument1){
        case C.pressed : return keyboard_check_pressed(argument0); break;
        case C.check : return keyboard_check(argument0); break;
        case C.released : return keyboard_check_released(argument0); break;
        default: return 0;
    }
   

Ce script nécessite deux arguments qui vont être les constantes qu'on a crée dans 'defineConstants'.

Voici un exemple d'utilisation:
Code:
if( key(C.key_jump,C.pressed) ) show_message('La touche de saut viens d'être pressée.');

Ajout de Scripts pour le double appuis:
Je rajoute une partie pour la gestion du double appuis de touche.

Alors, on va avoir besoin de variables pour stocker nos derniers appuis de touches.
Ces variables ne sont pas des variables qui serons inchangé pendant tout le jeu, on va dons s'interdire des les créées dans l'instance 'C'.
On va donc créer une nouvelle instance appelée 'G' pour 'global'.

defineGlobals :
Code:
globalvar G;
    G=instance_create(x,y,System);

with( G ){

//Derniers appuis sur les touches.
    last_press[C.key_left]=0;
    last_press[C.key_right]=0;

}

Voilà, on va maintenant pouvoir créer le script qui va nous permettre de savoir si on a fait un double appuis.

doublePress:
Code:
if ( !key(argument0, C.pressed) )return 0;

var i;   

if( current_time<(G.last_press[argument0]+argument1) )
    i=1;
else
    i=0; 
   
G.last_press[argument0]=current_time;

return i; 


Alors pour ce script on dispose de deux arguments:
0 = le bouton vérifié pour le double appuis.
1 = le temps en millisecondes du double appuis (je vous conseille 200).

Et voici un exemple d'utilisation:
Code:
if( doublePress(C.key_right,200) ) show_message('Double appuis de la flèche droite en moins de 200ms'); 


Anciennes versions supprimées.


Dernière édition par Caly le Mar 6 Mar 2012 - 12:43, édité 11 fois
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

Gestions des touches. Empty
MessageSujet: Re: Gestions des touches.   Gestions des touches. EmptyVen 10 Fév 2012 - 12:28

Par contre, par convention les majuscules c'est pour désigner des constantes Wink

_________________
Gestions des touches. Runningpotato1Gestions des touches. TvF6GED Gestions des touches. 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.

Gestions des touches. Empty
MessageSujet: Re: Gestions des touches.   Gestions des touches. EmptyVen 10 Fév 2012 - 12:36

Dans la logique ça reste des constantes sauf si tu utilise un script pour changer les touches.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

Gestions des touches. Empty
MessageSujet: Re: Gestions des touches.   Gestions des touches. EmptyVen 10 Fév 2012 - 12:39

Chez moi une constante ça bouge pas x)
La ça bouge en fonction de l'appuie de touche quoi :p

_________________
Gestions des touches. Runningpotato1Gestions des touches. TvF6GED Gestions des touches. 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.

Gestions des touches. Empty
MessageSujet: Re: Gestions des touches.   Gestions des touches. EmptyVen 10 Fév 2012 - 12:49

Blablabla Yum!
Ça ne change rien au script Razz

Je met des majuscules car c'est des globales aux qu'elles tu n'y touche pas normalement.
Apres le nom des variables les gens mettent ce qu'ils veulent, quand je vois certains codes sources je me dit qu'il y en a qui ont une imagination d'enfer et des cours de français/anglais manquants.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

Gestions des touches. Empty
MessageSujet: Re: Gestions des touches.   Gestions des touches. EmptyVen 10 Fév 2012 - 12:56

Je parle des convention standards de langages tels que le C/C++
Je pense que c'est une bonne idée de commencer a s'y mettre dès le gml.
Objets commençants par une majuscule, fonction de la forme jeSuisUneFonction(), etc...

_________________
Gestions des touches. Runningpotato1Gestions des touches. TvF6GED Gestions des touches. 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.

Gestions des touches. Empty
MessageSujet: Re: Gestions des touches.   Gestions des touches. EmptyVen 10 Fév 2012 - 13:06

Non mais j'avais bien compris, mais en GML mes globales je les écrits toujours en majuscules.
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.

Gestions des touches. Empty
MessageSujet: Re: Gestions des touches.   Gestions des touches. EmptyDim 19 Fév 2012 - 19:40

Je passe en mode "optimisation" "organisation" dans mon projet donc j'ai rajouté ma version actuel du script.

Les conditions se font comme suis:
if (Control.jump_pressed){ /*On saute*/}
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.

Gestions des touches. Empty
MessageSujet: Re: Gestions des touches.   Gestions des touches. EmptySam 3 Mar 2012 - 23:05

J'ai de renouveau changé car mon script ne me convenais pas, car pas assez modulaire.

J'ai donc mis le nouveau avec quelques explications d'utilisation en espérant vous rendre service pour vous organiser dans vos projets.
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.

Gestions des touches. Empty
MessageSujet: Re: Gestions des touches.   Gestions des touches. EmptyMar 6 Mar 2012 - 12:41

Ajout de deux scripts plus des expiations pour la gestion d'un double appuis de touches.
Revenir en haut Aller en bas
M@d_Doc
Modérateur
M@d_Doc


Messages : 6600
Localisation : 47°44'8.04
Projet Actuel : aucun

Gestions des touches. Empty
MessageSujet: Re: Gestions des touches.   Gestions des touches. EmptyMar 6 Mar 2012 - 13:00

Bonne idée de script, pour la gestion des touches multiples etc. Je ne sais par contre pas si l'assignation d'un objet est vraiment pertinente. Personnellement, j'aurais simplement déclaré des variables globales, comme suit, pour les réutiliser partout:

Code:
globalvar gkeyUp, gkeyDown, gkeyLeft, gkeyRight;

gkeyUp = vk_up;
gkeyDown = vk_down;
gkeyLeft = vk_left;
gkeyRight = vk_right;

Du coup, un appel, depuis n'importe où ressemble à:
Code:
if ( keyboard_check( keyUp ) )
{
//do somthg;
}
Mais bon, chacun sa méthode, j'ai pas réfléchi au truc trop longtemps, je loupe peut être des avantages à utiliser un objet Smile

_________________
Gestions des touches. Control_commentTous les icones de gm utilisables sur le cbna ICI Gestions des touches. Main1_change_sprite
Revenir en haut Aller en bas
http://www.lecbna.org
onilink_
Modérateur
onilink_


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

Gestions des touches. Empty
MessageSujet: Re: Gestions des touches.   Gestions des touches. EmptyMar 6 Mar 2012 - 13:01

Ça fait plaisir quand même, de temps en temps voir du beau code GML :p
Ça fait presque oxymorique ahah x)

_________________
Gestions des touches. Runningpotato1Gestions des touches. TvF6GED Gestions des touches. MdetltS
Revenir en haut Aller en bas
M@d_Doc
Modérateur
M@d_Doc


Messages : 6600
Localisation : 47°44'8.04
Projet Actuel : aucun

Gestions des touches. Empty
MessageSujet: Re: Gestions des touches.   Gestions des touches. EmptyMar 6 Mar 2012 - 13:32

Question d'habitude, je programme plus souvent dans d'autres langages, alors forcément, on écrit systématiquement "bien" Smile

_________________
Gestions des touches. Control_commentTous les icones de gm utilisables sur le cbna ICI Gestions des touches. Main1_change_sprite
Revenir en haut Aller en bas
http://www.lecbna.org
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.

Gestions des touches. Empty
MessageSujet: Re: Gestions des touches.   Gestions des touches. EmptyMer 7 Mar 2012 - 16:29

Bonjour,

Citation :
Je ne sais par contre pas si l'assignation d'un objet est vraiment pertinente. Personnellement, j'aurais simplement déclaré des variables globales, comme suit, pour les réutiliser partout:


Code:
globalvar gkeyUp, gkeyDown, gkeyLeft, gkeyRight;

gkeyUp = vk_up;
gkeyDown = vk_down;
gkeyLeft = vk_left;
gkeyRight = vk_right;

Le stockages de variables dans des instances a un inconvenant sur ce que tu propose, c'est l'optimisation bien entendue. Mais il m'offre plusieurs avantages.
La premier c'est d'éviter d'écrire les noms de variables deux fois (quant on est flemmard ça l'emporte sur la mini optimisation des globalvar).

Ça me permet aussi réinitialiser mes variables.
Code:
if( le_gros_tricheur_de_joueur_a_reussi_a modifier_mes_constantes ){
whit(C) instance_destroy();
defineConstant();
 }

Si j'ai besoin de variables globales juste pour un niveau spécial je n'ai qu'à créer une instance de System et la supprimer à la fin.

C'est des petits trucs discutables mais comme tu dit chaqu'un ses méthodes Wink

Citation :
if ( keyboard_check( keyUp ) )
{
//do somthg;
}

Code que j'utilise d'habitude mais le soucis avec ce code c'est que keyUp ne peut être un bouton de la souris. C’est pour cette raison que je suis venus à créer ce script. Car je ne vois pas pourquoi on ne pourrais pas sauter avec un clic droit dans un mario.

Sinon je dois coder le script pour les combos de touches, je le posterai ici dés qu'il sera finit et testé.
Et je ferai peut être un tuto sur le tout.
Revenir en haut Aller en bas
M@d_Doc
Modérateur
M@d_Doc


Messages : 6600
Localisation : 47°44'8.04
Projet Actuel : aucun

Gestions des touches. Empty
MessageSujet: Re: Gestions des touches.   Gestions des touches. EmptyMer 7 Mar 2012 - 16:43

Effectivement, j'avais zappé l'aspect "on enregistre des events, et pas des correspondances de touches". C'est une bonne idée je trouve ^^

_________________
Gestions des touches. Control_commentTous les icones de gm utilisables sur le cbna ICI Gestions des touches. Main1_change_sprite
Revenir en haut Aller en bas
http://www.lecbna.org
Contenu sponsorisé





Gestions des touches. Empty
MessageSujet: Re: Gestions des touches.   Gestions des touches. Empty

Revenir en haut Aller en bas
 
Gestions des touches.
Revenir en haut 
Page 1 sur 1

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