| Gestions des touches. | |
|
|
Auteur | Message |
---|
Caly Utilisateur confirmé: Rang ****
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.
| Sujet: Gestions des touches. Ven 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 |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Gestions des touches. Ven 10 Fév 2012 - 12:28 | |
| Par contre, par convention les majuscules c'est pour désigner des constantes |
|
| |
Caly Utilisateur confirmé: Rang ****
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.
| Sujet: Re: Gestions des touches. Ven 10 Fév 2012 - 12:36 | |
| Dans la logique ça reste des constantes sauf si tu utilise un script pour changer les touches. |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Gestions des touches. Ven 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 |
|
| |
Caly Utilisateur confirmé: Rang ****
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.
| Sujet: Re: Gestions des touches. Ven 10 Fév 2012 - 12:49 | |
| Blablabla Ça ne change rien au script 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. |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Gestions des touches. Ven 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... |
|
| |
Caly Utilisateur confirmé: Rang ****
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.
| Sujet: Re: Gestions des touches. Ven 10 Fév 2012 - 13:06 | |
| Non mais j'avais bien compris, mais en GML mes globales je les écrits toujours en majuscules. |
|
| |
Caly Utilisateur confirmé: Rang ****
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.
| Sujet: Re: Gestions des touches. Dim 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*/} |
|
| |
Caly Utilisateur confirmé: Rang ****
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.
| Sujet: Re: Gestions des touches. Sam 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. |
|
| |
Caly Utilisateur confirmé: Rang ****
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.
| Sujet: Re: Gestions des touches. Mar 6 Mar 2012 - 12:41 | |
| Ajout de deux scripts plus des expiations pour la gestion d'un double appuis de touches. |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Gestions des touches. Mar 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 |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Gestions des touches. Mar 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) |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Gestions des touches. Mar 6 Mar 2012 - 13:32 | |
| Question d'habitude, je programme plus souvent dans d'autres langages, alors forcément, on écrit systématiquement "bien" |
|
| |
Caly Utilisateur confirmé: Rang ****
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.
| Sujet: Re: Gestions des touches. Mer 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 - 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. |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Gestions des touches. Mer 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 ^^ |
|
| |
Contenu sponsorisé
| Sujet: Re: Gestions des touches. | |
| |
|
| |
| Gestions des touches. | |
|