Forums Développement Multimédia

Aller au contenu

Répétition d'une action sur une touche de clavier

CODE boucle

2 réponses à ce sujet

#1 philouUPCE

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 14 March 2016 - 16:54 PM

Bonjour,

Je pense que j'ai un problème de débutant. (Je suis un débutant ;-) )

J'ai crée ce bout de code qui me permet d'afficher un fond (avec une couleur définie) avec un masque par dessus et lorsqu'on appuie sur la touche flèche gauche on transforme la couleur par addition rgb.

J'ai ajouté également un removeEventListener pour éviter la répétition de la modification lors de l'appui prolongé sur la touche.

Jusque là ça va très bien, ma couleur est modifiée correctement mais après il ne se passe plus rien. ce que je voudrais c'est une sorte de boucle, de façon à ce que quand je relâche la touche et appuie une nouvelle fois la dernière couleur est affichée et une nouvelle modification s'effectue et ainsi de suite.

Voici mon code, en espérant que quelqu'un pourra m'aider:



import flash.geom.ColorTransform;
import flash.display.Shape;

// Création du mask
var monMask:monClip2 = new monClip2();


// Création du fond (forme et couleur)
var rectangle:Shape = new Shape ();
rectangle.graphics.beginFill(0xc9c9c9);
rectangle.graphics.drawRect(0, 0, 550, 400);


// Définition de la couleur du Mask
var my_color:ColorTransform = monMask.transform.colorTransform;
my_color.color = 0xFF0000;
monMask.transform.colorTransform = my_color;

// affichage du fond et du mask par dessus
this.addChild(rectangle);
addChild(monMask);

// Appui sur flêche gauche...
var flecheGauche:Boolean = true;
stage.addEventListener(KeyboardEvent.KEY_DOWN, toucheEnfonce);
function toucheEnfonce(evt:KeyboardEvent) {
if (evt.keyCode == 37) {
flecheGauche = true;

// ... modifie la couleur du fond
var ma_couleur:ColorTransform = rectangle.transform.colorTransform;
ma_couleur.blueOffset = ma_couleur.blueOffset - 100;
ma_couleur.greenOffset = ma_couleur.greenOffset - 18;
ma_couleur.redOffset = ma_couleur.redOffset - 10;
rectangle.transform.colorTransform = ma_couleur;


// J'enlève l'écouteur pour stopper la lecture sur la touche enfoncée
stage.removeEventListener(KeyboardEvent.KEY_DOWN, toucheEnfonce);

// J'affiche mon fond avec la nouvelle couleur et le mask par dessus
this.addChild(rectangle);
addChild(monMask);

}
}


#2 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 15 March 2016 - 10:09 AM

Bonjour philou.
Félicitation, pour un débutant le code est propre et bien commenté.
Au moment ou tu retires l'écouteur pour éviter la répétition de touche enfoncée, il faudrait que tu ajoutes un écouteur, de type KEY_UP, pour savoir quand l'utilisateur relâche la touche.
Dans la fonction associée à cet écouteur, tu remets lécouteur KEY_DOWN et le tour est joué.

Maintenant, il y a peut être plus simple…
2 écouteurs : KEY_DOWN et KEY_UP, mais permanents cette fois.
Une variable : fleche_gauche, initialement à false

La fonction de rappel du premier écouteur regarde la valeur de fleche_gauche
Si elle est false, on passe la valeur a true et on dessine.
Si elle est true, on ne fait rien…

La fonction de rappel du second écouteur ne regarde même pas la valeur de fleche_gauche, elle la force à la valeur false.

Ceci devrait suffire.

#3 philouUPCE

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 17 March 2016 - 12:31 PM

Merci Didier,

C'est tout simple et ça fonctionne bien.
J'ai testé les deux solution (c'est comme ça qu'on apprend.

Encore merci



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP