2010-10-31 5 views
0

J'essaye de faire un simple lecteur mp3 en utilisant le flash. Les chansons sont chargées en utilisant un fichier XML qui contient la liste des chansons. Le code suivant est inséré dans une nouvelle image clé.Incrémentation d'une variable globale dans une fonction qui est appelée plusieurs fois

import flash.media.Sound; 
import flash.media.SoundChannel; 
import flash.events.*; 
import flash.events.MouseEvent; 
import flash.net.URLRequest; 
import flash.xml.*; 

/* Defining The Elements and Variables of the Music Player */ 
var MusicLoading:URLRequest;       
var music:Sound = new Sound(); 
var sc:SoundChannel; 
var currentSound:Sound = music; 
var CurrentPos:Number;        
var xml:XML; 
var songlist:XMLList;        
var currentIndex:uint;        
var XMLLoader:URLLoader = new URLLoader();   
/* ------------------------------------------------------ */ 


/* --------------------Load songs from the list-------------------- */ 
function success(e:Event):void 
{ 
    xml = new XML(e.target.data); 
    songlist = xml.song; //For adding a new song in XML File. 
    MusicLoading = new URLRequest(songlist[0].file); 
    music.load(MusicLoading); 
    currentIndex = 0; 
} 
//If XML File Load successfully, it will be voided this actions: 
XMLLoader.addEventListener(Event.COMPLETE, success); 

//The Name of the XML File. 
XMLLoader.load(new URLRequest("playlist.xml")); 

//Play The Song 
function playSong(e:Event):void 
{ 
    if(sc != null) 
     sc.stop(); 

    sc = currentSound.play(CurrentPos); 
} 

//Pause The Song 
function pauseSong(e:Event):void 
{ 
    CurrentPos = sc.position; 
    sc.stop(); 
} 


//Next Song Functions 
function nextSong(e:Event):void 
{ 
    sc.stop(); 

trace(currentIndex + " "); 

    currentIndex = currentIndex + 1; 

    trace(currentIndex); 

    var nextSongFunc:URLRequest = new URLRequest(songlist[currentIndex].file); 
    var nextTitle:Sound = new Sound(); 
    nextTitle.load(nextSongFunc); 
    currentSound = nextTitle; 
    sc = currentSound.play(); 

    sc.addEventListener(Event.SOUND_COMPLETE, nextSong); 
} 

PauseBtn.addEventListener(MouseEvent.CLICK, pauseSong); 
PlayBtn.addEventListener(MouseEvent.CLICK, playSong); 
NextBtn.addEventListener(MouseEvent.CLICK, nextSong); 

Le problème ici est dans la fonction nextSong(). Je suis incapable de préserver la valeur de currentIndex. Bien que j'incrémente currentIndex à chaque fois que la fonction est appelée, mais la valeur reste inchangée. Veuillez suggérer ...

+0

Je ne pense pas que cela devrait être catégorisé comme Flex, car vous ne semblez pas du tout avoir affaire au framework Flex. – JeffryHouser

Répondre

0

Étant donné que votre variable est définie dans l'image-clé, elle est réinitialisée à chaque fois que l'image-clé est touchée. Je parie que déplacer la définition en dehors de la portée de l'image clé aiderait. Par exemple, à la racine du Flash (bien que pas trop bon en termes de POO)

+0

Pourriez-vous s'il vous plaît élaborer sur la façon de faire cela ??? –

+0

Je suis nouveau au flash ... suis assez clueless pour le moment ... –

+0

Puisque je n'ai aucune idée de la façon dont votre projet flash ressemble (et pas de moyen facile de poster), je ne suis pas tout à fait sûr si c'est le problème. Mais vous avez mentionné que votre code ci-dessus est attaché à l'image clé, non? Flash est assez intéressant, il peut programmer de manière presque complète, mais aussi de façon script. Pour un script attaché à une image clé, il est exécuté CHAQUE FOIS que l'image clé est lue. c'est-à-dire, votre "var currentIndex: uint;" est exécuté et re-init à chaque fois. Un hack rapide utilise "_root" global var: http://www.adobe.com/support/flash/action_scripts/actionscript_dictionary/actionscript_dictionary633.html – xandy

Questions connexes