Gestionnaire keyboardevent (touche multiple)

Soyez le premier à donner votre avis sur cette source.

Vue 5 313 fois - Téléchargée 568 fois

Description

Bonjour à tous,

Quel développeur ActionScript 3 utilisant les évènements clavier (KeyboardEvent) ne s'est jamais posé la question suivante : "Comment faire si mon action résulte d'une combinaison de touche ?"

Voici donc un gestionnaire d'appui de touche multiple sous forme d'évènement.

La mise en place est légèrement différente qu'un évènement standards puis celui-ci n'est pas inclus par défaut sur un DisplayObject.

Si quelqu'un à une solution à apporter pour faciliter un peu plus l'ajout du gestionnaire (qui est ma foi déjà pas très lourd d'utilisation) je suis preneur.

Source / Exemple :


Le fichier zip contient deux classes, l'une pour la récupération multiple des touches appuyés, l'autre pour l'évènement associé.

Voici un exemple d'implémentation :

import flash.text.TextField;
import flash.text.TextFieldAutoSize;

var myText:TextField = new TextField();
myText.autoSize = TextFieldAutoSize.LEFT;
myText.x = myText.y = 10;
addChild(myText);

var myKeyboardProcess:KeyboardProcess = new KeyboardProcess(stage);
stage.addEventListener(KeyboardProcessEvent.KEY_DOWN, myEvent);

function myEvent(Evt:KeyboardProcessEvent):void {
	myText.text = Evt.toString().replace(new RegExp(" ","g"),"\n\t")+"\n"+Evt.target;
}

Conclusion :


Amélioration possible : Employer la classe Vector plutôt que la classe Array pour stocker la liste des codes touches appuyées.
La mise en place s'avère cependant peut être plus lourde par rapport au gain de performance gagné (aussi infime soit-il).

L'utilisation de ces deux classes est libre à condition de laisser le nom de l'auteur (comme indiquer dans chacune des classes).

En cas d'utilisation à des fins commerciale, merci de m'en avertir

Cette source est également présente sur mon blog:
http://www.osteres.com/blog/archives/69

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Blacknight91titi Messages postés 1732 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 9 mars 2015 2
24 févr. 2009 à 20:14
Ouh là ! Oui en effet... Qu'est ce que j'ai fait la !

Mon idée première était d'avoir une classe qui s'occupe elle même de distribuer l'évènement de façon régulière.
Le problème c'est que ce raisonnement est plus compatible avec AS2 qu'avec AS3.

L'emploi du Timer peut s'avérer utile, mais pas à l'intérieur de la classe.

Merci de me l'avoir fait remarqué, la source a été corrigé en conséquence.
Bien qu'elle soit largement allégée, elle reste, je pense, utile ("j'espère"... plutôt :D)

Bon au moins, elle peut toujours servir pour découvrir que l'on peut créer ces propres évènements ;)

Merci encore TOP30 :)
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
24 févr. 2009 à 19:28
Pourquoi l'utilisation d'un "Timer" ???

KeyboardProcess ( repeat:Boolean )
-> addMultiKeyEvent( [keysList], handler );


stage.addEventListener( "up", processKeyUp ) ;
stage.addEventListener( "down", processKeyDown ) ;

KeyboardProcess.processKeyDown( e )
-> pressKeys[e.keyCode]= true ;
for each( multiKeys in multiKeysList )
for each( key in multiKeys )

pressed= 0
if( pressKey[key] ) pressed++ ;
if( pressed== multiKeys.length )

if( repeat )
DISPATCHER EVENT TOUTES KEY DEMANDE PRESSËE
else
if( !dispatched[multiKeys] )
dispatched[multiKeys]= true
DISPATCHER EVENT TOUTES KEY DEMANDE PRESSËE

KeyboardProcess.processKeyUp( e )
-> DELETE pressKeys[e.keyCode] ;

Ou quelquechose comme ca...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.