2009-10-12 6 views
0

Je crée un quiz dans lequel l'utilisateur associe un objet (clip) à un clip audio lu. Les sons sont stockés dans un tableau et un aléatoire est choisi. Ensuite, 4 clips vidéo aléatoires sont créés dynamiquement et contiennent l'image de l'objet. J'ai besoin d'un moyen de lier le clip audio aux clips vidéo pour vérifier si le clip correct a été cliqué. Voici le code à ce jour:Lecture aléatoire du son et correspondance avec le quiz du clip AS3, CS4

var randSound = Math.round(Math.random()*1);   // Rand no 0-4 
var sounds:Array = [cat, doorCreek];     // Sound array 
var soundClip:Sound = new sounds[randSound];   // Create random sound 

sound_btn.addEventListener(MouseEvent.CLICK, playSound); // Re-play sound button 
function playSound(e:MouseEvent) { soundClip.play(); } 

var clips:Array =[cat, door, wind, water];  // Movie clip array (will be longer) 

// Add objects to stage 
for(var i=0; i<4; i++) 
{ 
    var rand = Math.round(Math.random()*4);  // 4 clips as answer options 

    var myRandClip:MovieClip=new clips[rand];  // Create random movieclip 

    // Create listener for the movieclip 
    myRandClip.addEventListener(MouseEvent.CLICK, getIndex); 

    function getIndex(e:MouseEvent) 
    { 
     trace(rand); 
    } 

    this.addChild(myRandClip); 
} 

Bien sûr, au moment de cette fonction pour obtenir l'index du clip devient juste le dernier numéro de rand généré. J'ai besoin d'un moyen d'intégrer une sorte d'id dans le clip généré. Je peux alors simplement tester si c'est le même que l'index des clips sonores par exemple. Je ferai ensuite la même chose pour chaque question (10 au total)

Espérons que c'est clair et que quelqu'un peut aider. Merci beaucoup

Répondre

0

Je ne comprends pas votre problème. Vous êtes le patron de votre code. Il suffit de nous POO - il y a vraiment beaucoup de façons de le faire droit :)

Ok, l'un des plus simples:

// in constructor or AddToStage event handler, or just in timeline 

soundIndex = Math.round(Math.random()*soundArray.length); 
playSoundFormArray(soundIndex); 

var btn:MyButton; 
for(var i:uint=0; i< buttonsArray.length; i++){ 
    btn = MyButton(index, checkFunction); 
    // changee position, etc. 
} 

//..... 

private function checkFunction(index:uint):void 
{ 
    if(soundIndex == btnIndex){ 
     // your code 
    } 
} 

///MyButton.as 
// Simple Sprite extended class with click event handler 
package{ 
    import flash.events.Event; 
    import flash.display.Sprite; 
    import flash.events.MouseEvent; 
    import flash.text.TextField; 

    public class MyButton extends Sprite 
    { 
     private var _callBack:Function; 
     private var _index:uint; 

     public function Main(index:uint, callBack:Function, label:String="btn") 
     { 
      _index = index; 
        _callback = callBack; 
        addEventListener(Event.ADDED_TO_STAGE, init); 

        // customizing button 
        var textField:TextField = new TextField(); 
        textField.text = label; 
        // or your code 

     } 

     private function init(e:Event):void 
     { 
      addEventListener(Event.Click, clickHandler); 
     } 

      private function clickHandler(e:MouseEvent):void 
     { 
      _callBack(_index); 
     } 

    } 
} 

C'est tout. Désolé pour éventuellement des erreurs. Écrit dans le navigateur. Pas testé.

+0

Merci pour votre réponse. Le problème est vraiment que je dois être en mesure de comparer le bouton cliqué sur un nombre détenu pour le clip audio. Ensuite, je peux voir s'ils ont cliqué sur la bonne réponse. Je suis sûr que la POO est la voie à suivre mais je n'en ai pas fait grand-chose en flash. C'est la meilleure option que vous estimez? – whamo