Forum de discussion
Forum « Flash et Shockwave » (archives)
Re: son et bouton
Envoyé: 5 mars 2002, 10h26 par Oznog
Le truc avec le sont est de te créer un MovieClip qui contient un attachesound et tous les boutons pour le manipuler. Le tout à l'intérieur du MovieClip.
Beaucoup plus simple à manipuler. Et si tu veux y accéder à l'extérieur du movieClip, il suffit d'indiquer la cible (target) selon l'instance sur la scène de ton MovieClip. Mis rien n'indique si le son joue ou pas. Tu dois te créer une variable et la mettre à jour manuellement pour le savoir.
a. quand tu par un son tu met une variable boléenne à vrais (vJoue=true) et quand tu arrête un son tu remet cette variable à faux (vJoue=false). De cette façon tu n'as qu'à tester si vJoue == false alors part le son et met vJoue à vrais... Quand tu arrête le son tu remet vJoue à false...
Par exemple ce MovieClip.
1. IL FAUT ABSOLUMENT DONNER UN NOM DE "LINKAGE" au son avec cette méthode. Importe ton son dans la librairie. Ensuite clic sur ton son dans la librairie et avec le menu (flèche en haut à droite de la fenêtre Librairie.) sélectionne LIKAGE. Clic "Export this symbol" et donne lui un nom "identifiant". Ce nom est en quelque sorte son nom d'intance virtuel.
2. Le MovieClip qui va contenir le son et les bouton doit être placé sur la scène et tu dois lui donner comme nom d'instance le même que l'identifiant (linkage) du son dans la librairie.
Tu le glisse sur la scène et tu ajoute dessus l'action "Objects Actions": C'est pour initialiser ton son.
onClipEvent (load) {
// LOAD = une seul fois.
// Cré un nouvel objet de type SON
// et lui attache un son de la librairie
// en utilisant l'identifiant de linkage.
// NOTE que this._name est le nom de l'instance
// du MovieClip sur la scène. C'est pour que le code
// soit portable sans changer ce code... Et c'est pourquoi
// l'instance du MovieClip doit être le même que le linkage du son.
mcSon1 = new Sound(this);
mcSon1.attachSound(this._name);
// Déclaration et initialisation des propriété du son
var loops = 500;
var secondOffset = 0;
var volume = 100;
var pan = 0;
// Variable qui t'indique si le son joue ou non...
// Puisqu'il ne joue pas au départ elle est à false...
var nJoue = false;
}
onClipEvent (enterFrame) {
// enterFRAME = à chaque frame. (12 fois par seconde).
// Ajuste le son et le pan (qui peuvent être modifié
// dynamiquement dans le MovieClip.
mcSon1.setVolume(volume);
mcSon1.setPan(pan);
}
3. Dans ton MovieClip, tu à deux bouton, un STOP et l'autre GO. Pour l'action du stop c'Est très simple sauf qu'il ne faut pas oublier de mettre nJour à false pour indiquer que ton son ne joue plus.
on (press) {
// Arrête le son de mcSon1 et met nJoue à faux.
mcSon1.stop();
nJoue = false;
}
4. Pour le bouton GO: Tu dois t'assurer qu'il ne joue pas avant, avec un test de condition. !nJoue = NOT nJoue ou si nJoue = faux alors joue et met nJoue à vrais.
on (press) {
// Test si nJoue est à false ou faux
if (!nJoue) {
// Si le nJoue est à false alors part le son...
// Puisque tu sait que nJour à false indique que
// le son est arrêté.
mcSon1.start(secondOffset,loops);
// Et bien sûr met nJoue à true pour indiquer que
// le son joue présentement...
nJoue = true;
}
}
Voilà
Pour manipuler le son à l'extérieur du MovieClip depuis la scène utilise ce ciblage (target):
POUR GO:
on (release) {
// MovieClip temporaire t pour temp, tMc
var tMc;
tMc = _root["mcSon1"];
if (!tMc.nJoue) {
tMc.mcSon1.start(tMc.secondOffset, tMc.loops);
tMc.nJoue = true;
}
POUR STOP
on (release) {
var tMc;
tMc = _root["mcSon1"];
tMc.mcSon1.stop();
tMc.nJoue = false;
}
Avec ça tu peux pratiquement tout faire car il suffit d'ajouter un nouveau MovieClip avec comme instance "mcSon2" pour avoir un deuxième son.
Ciao
Oznog
Réponses
|