Forums Développement Multimédia

Aller au contenu

Piano

CODE

2 réponses à ce sujet

#1 hbilly

    Ceinture Jaune

  • Members
  • PipPip
  • 19 messages

Posté 18 February 2015 - 08:08 AM

Pourquoi en ligne il faut que je l'active avec la souris pour avoir les sons
mon code
Pour les variables dupliquer, j'ai corrigé.

import flash.events.Event;
import flash.geom.ColorTransform;

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
function keyDownHandler(e:KeyboardEvent)

                {
               
                  if(e.keyCode == 81){
                        {
        var mySound1:Sound = new sonDo();
mySound1.play();
                                var coul:ColorTransform= new ColorTransform();
coul.color=0x00FF00;
bt1.transform.colorTransform=coul;

                        }
                 }
         if(e.keyCode == 83){
                        {
                                var mySound2:Sound = new sonRe();
mySound2.play();
                                var coul1:ColorTransform= new ColorTransform();
coul1.color=0x00FF00;
bt2.transform.colorTransform=coul1;
}
}
  if(e.keyCode == 68){
                        {
                                var mySound3:Sound = new sonMi();
mySound3.play();
                                var coul2:ColorTransform= new ColorTransform();
coul2.color=0x00FF00;
bt3.transform.colorTransform=coul2;

                        }
                  }
                 if(e.keyCode == 70){
                        {
                                var mySound4:Sound = new sonFa();
mySound4.play();
                                var coul3:ColorTransform= new ColorTransform();
coul3.color=0x00FF00;
bt4.transform.colorTransform=coul3;

                        }
                  }    
                 if(e.keyCode == 71){
                        {
                                var mySound5:Sound = new sonSol();
mySound5.play();
                                var coul4:ColorTransform= new ColorTransform();
coul4.color=0x00FF00;
bt5.transform.colorTransform=coul4;

                        }
                  }    
                 if(e.keyCode == 72){
                        {
                                var mySound6:Sound = new sonLa();
mySound6.play();
                                var coul5:ColorTransform= new ColorTransform();
coul5.color=0x00FF00;
bt6.transform.colorTransform=coul5;

                        }
                  }    
                 if(e.keyCode == 74){
                        {
                                var mySound7:Sound = new sonSi();
mySound7.play();
                                var coul6:ColorTransform= new ColorTransform();
coul6.color=0x00FF00;
bt7.transform.colorTransform=coul6;

                        }
                  }    
                 if(e.keyCode == 75){
                        {
                                var mySound8:Sound = new sonDoo();
mySound8.play();
                                var coul7:ColorTransform= new ColorTransform();
coul7.color=0x00FF00;
bt8.transform.colorTransform=coul7;

                        }
                  }    
                 if(e.keyCode == 87){
                        {
                                var mySound9:Sound = new sonDooo();
mySound9.play();
                                var coul8:ColorTransform= new ColorTransform();
coul8.color=0x1B019B;
n1.transform.colorTransform=coul8;

                        }
                  }    
                  if(e.keyCode == 88){
                        {
                                var mySound10:Sound = new sonRee();
mySound10.play();
                                var coul9:ColorTransform= new ColorTransform();
coul9.color=0x1B019B;
n2.transform.colorTransform=coul9;

                        }
                  }    
                  if(e.keyCode == 67){
                        {
                                var mySound11:Sound = new sonFaa();
mySound11.play();
                                var coul10:ColorTransform= new ColorTransform();
coul10.color=0x1B019B;
n3.transform.colorTransform=coul10;

                        }
                  }    
                if(e.keyCode == 86){
                        {
                                var mySound12:Sound = new sonSoll();
mySound12.play();
                                var coul11:ColorTransform= new ColorTransform();
coul11.color=0x1B019B;
n4.transform.colorTransform=coul11;

                        }
                  }    
                       
                  if(e.keyCode == 66){
                        {
                                var mySound13:Sound = new sonLaa();
mySound13.play();
                                var coul12:ColorTransform= new ColorTransform();
coul12.color=0x1B019B;
n5.transform.colorTransform=coul12;

                        }
                  }    
                 
}





stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler)
function keyUpHandler(e:KeyboardEvent):void{
         if(e.keyCode == 81){
                        {
                               
                                var coul:ColorTransform= new ColorTransform();
coul.color=0xFFFFFF;
bt1.transform.colorTransform=coul;
}
}
//relacher touches       
                 if(e.keyCode == 83){
                        {
                               
                                var coul1:ColorTransform= new ColorTransform();
coul1.color=0xFFFFFF;
bt2.transform.colorTransform=coul1;
}
}
  if(e.keyCode == 68){
                        {
                               
                                var coul2:ColorTransform= new ColorTransform();
coul2.color=0xFFFFFF;
bt3.transform.colorTransform=coul2;

                        }
                  }
                 if(e.keyCode == 70){
                        {
                               
                                var coul3:ColorTransform= new ColorTransform();
coul3.color=0xFFFFFF;
bt4.transform.colorTransform=coul3;

                        }
                  }    
                 if(e.keyCode == 71){
                        {
                               
                                var coul4:ColorTransform= new ColorTransform();
coul4.color=0xFFFFFF;
bt5.transform.colorTransform=coul4;

                        }
                  }    
                 if(e.keyCode == 72){
                        {
                               
                                var coul5:ColorTransform= new ColorTransform();
coul5.color=0xFFFFFF;
bt6.transform.colorTransform=coul5;

                        }
                  }    
                 if(e.keyCode == 74){
                        {
                               
                                var coul6:ColorTransform= new ColorTransform();
coul6.color=0xFFFFFF;
bt7.transform.colorTransform=coul6;

                        }
                  }    
                 if(e.keyCode == 75){
                        {
                               
                                var coul7:ColorTransform= new ColorTransform();
coul7.color=0xFFFFFF;
bt8.transform.colorTransform=coul7;

                        }
                  }      
if(e.keyCode == 87){
                        {
                               
                                var coul8:ColorTransform= new ColorTransform();
coul8.color=0x000000;
n1.transform.colorTransform=coul8;

                        }
                  }    
                  if(e.keyCode == 88){
                        {
                               
                                var coul9:ColorTransform= new ColorTransform();
coul9.color=0x000000;
n2.transform.colorTransform=coul9;

                        }
                  }    
                  if(e.keyCode == 67){
                        {
                               
                                var coul10:ColorTransform= new ColorTransform();
coul10.color=0x000000;
n3.transform.colorTransform=coul10;

                        }
                  }    
                if(e.keyCode == 86){
                        {
                               
                                var coul11:ColorTransform= new ColorTransform();
coul11.color=0x000000;
n4.transform.colorTransform=coul11;

                        }
                  }    
                       
                  if(e.keyCode == 66){
                        {
                               
                                var coul12:ColorTransform= new ColorTransform();
coul12.color=0x000000;
n5.transform.colorTransform=coul12;

                        }
                  }    
}



         


 

Fichier(s) joint(s)



#2 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 18 February 2015 - 11:24 AM

Bonjour hbilly

Je pense que ton soucis vient seulement du "focus".
Par contre, cela veut dire que tu ne peut pas faire autrement.

En fait, flash ne permet pas de capter les événements claviers sans qu'il y ai eu au moins une action, comme un clic par exemple, de la part de l'utilisateur. C'est une mesure de sécurité. Après ce premier clic, le stage obtiens le focus et les événements keyUp et keyDown peuvent être écoutés.

Par contre, côté code, tu as beaucoup d'optimisations à faire. Ta vision du code est trop linéaire et tu te compliques finalement beaucoup la tâche.
Une très grande partie de programmation, c'est de gérer les données. Quand on ne le fait pas, on tartine des lignes et des lignes de code, comme toi, en fonction du do, du ré, du mi…
Si tu ranges bien tes données, tu pourrais coder en oubliant do, ré, mi… et en pensant juste choix de l'utilisateur.

Qu'as-tu comme données à gérer ?
- les boutons
- les couleurs
- les sons

Pour gérer se genre de groupe de données, les objets sont bien adaptés.
Par exemple :
{ note:new Do(), bouton:bt_do, couleur:vert }
est un objet. On le reconnait à ses { et }

Dedans, il y a trois étiquettes : note, bouton et couleur.
Ce qui suit le deux-points après l'étiquette, c'est la valeur que l'on donne à l'étiquette.
Sur le même exemple, si je donne un nom de variable à cet objet, je pourrai récupérer les valeurs des étiquettes ainsi :
var choix:Object : { note:new Do(), bouton:bt_do, couleur:vert };
choix.bouton; // accède à l'objet bt_do
// et

choix.note.play(); // accède à l'objet Do et le joue

Quand on a ça, le plus dur est fait.
Maintenant, il faut juste être capable de retrouver l'objet 'choix'…
Pour ça, tu ne disposes que du keyCode tapé, un nombre entier.
Dans ce cas, c'est le type Array le plus adapté pour stocker les objets 'choix'.

En créant un tableau et en stockant les objets choix aux indices correspondants au keyCode, tu pourras retrouver toutes tes infos.
Ça donnerait :

var touches:Array = []; // Je crée le tableau
touches[81] = { note:new Do(), bouton:bt_do, couleur:vert }; // Je stocke les infos du Do à l'indice 81

Et là, c'est magique.
Quand une touche est appuyée, la fonction associée est lancée.
Elle peut :
- récupérer le keyCode
- récupérer l'objet stocké dans le tableau touches à l'indice du keyCode
- jouer le son
- appliquer la couleur au bouton
tout cela, sans savoir si il s'agit du Do, du Ré, du Mi…
Juste parce que les infos sont bien rangées.

Je t'ai fait un petit exemple en pièce jointe où tout ton code est juste remplacé par ça :

import flash.events.Event;
import flash.geom.ColorTransform;

var vert:ColorTransform = new ColorTransform(0,1,0,1);
var bleu:ColorTransform = new ColorTransform(0,0,0,1,0,0,255);
var sans_couleur:ColorTransform = new ColorTransform();

var touches:Array = [];
touches[81] = { note:new Do(), bouton:bt_do, couleur:vert };
touches[83] = { note:new Re(), bouton:bt_re, couleur:vert };
touches[68] = { note:new Mi(), bouton:bt_mi, couleur:vert };
touches[70] = { note:new Fa(), bouton:bt_fa, couleur:vert };
touches[71] = { note:new So(), bouton:bt_sol, couleur:vert };
touches[72] = { note:new La(), bouton:bt_la, couleur:vert };
touches[74] = { note:new Si(), bouton:bt_si, couleur:vert };
touches[87] = { note:new DD(), bouton:bt_dd, couleur:bleu };

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);

function keyDownHandler(e:KeyboardEvent):void {
  var choix:Object = touches[e.keyCode];
  if (choix != null) {
   choix.note.play();
   choix.bouton.transform.colorTransform = choix.couleur;
  }
}

function keyUpHandler(e:KeyboardEvent):void {
  var choix:Object = touches[e.keyCode];
  if (choix != null) {
   choix.bouton.transform.colorTransform = sans_couleur;
  }
}

Fichier(s) joint(s)



#3 hbilly

    Ceinture Jaune

  • Members
  • PipPip
  • 19 messages

Posté 18 February 2015 - 12:07 PM

Super, Merci Didier pour ta réponse rapide et pour ton exemple et tes commentaires .


j'apprends mais sa rentre pas vite.............

Merci

Bonne journée



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