2013-05-19 62 views
0

在我的项目(MP3播放器),当我点击按钮“播放”启动AMD发挥正常,但是当我点击按钮“下一首歌曲”它multiplys点击次数(2次点击乘以2次,3次点击3次...),并且在背景中开始播放2或3首或更多歌曲。为什么它会增加我的按钮点击次数?有人可以帮助我吗?Flex键多次点击

按钮:

<s:Button id="PlayBtn" x="97" y="14" width="79" height="24" label="Play" 
      click="playButton_clickHandler(event)" enabled="true"/> 
<s:Button id="nastepnyBtn" x="354" y="14" width="79" height="24" label="=&gt;&gt;" click="nastepnyBtn_clickHandler(event)"/> 

操作:

protected function playButton_clickHandler(event:MouseEvent):void {Odtwarzaj();} 

    protected function nastepnyBtn_clickHandler(event:MouseEvent):void {Odtwarzaj(1);} 

PlayCode:

function Odtwarzaj(tryb:Number=0):void{ 
      var wybrany:Object = dataGridId.selectedItem; 

      if(wybrany!=null){ 
       switch(tryb){ 
        case 0: 
         if(playing) 
         stop(); 

         WybranyKawalek=dataGridId.selectedIndex; 
         break; 
        case 1: 
         if(!Normalnie.selected){ 
          Alert.show("losuje"); 
         }else 
         { 
          if(WybranyKawalek==tablica.length-1){ 
           WybranyKawalek=0; 
          }else 
          { 
           WybranyKawalek=WybranyKawalek+1; 
          } 

         } 
         stop(); 
         //playing=false; 
         break; 
        case 2: 
         if(!Normalnie.selected){ 
          Alert.show("losuje"); 


         }else 
         { 
          if(WybranyKawalek==0){ 
           WybranyKawalek=tablica.length-1; 
          } 
          else{ 

           WybranyKawalek=WybranyKawalek-1; 
          } 
         } 
         stop(); 
         //playing=false; 
         break; 

        } 


        Alert.show("test="+test+" tryb="+tryb+" wybrany:"+WybranyKawalek+" t.l="+tablica.length+" dg.si="+dataGridId.selectedIndex); 


        playingLable.text=tablica.getItemAt(WybranyKawalek).artysta+" - "+tablica.getItemAt(WybranyKawalek).tytul; 
        file = new File(tablica.getItemAt(WybranyKawalek).URL_PLIKU); 

        if(!playing){ 
         muzyka=new Sound(); 
         muzyka.addEventListener(IOErrorEvent.IO_ERROR, errorHandlerMusic); 
         muzyka.addEventListener(Event.COMPLETE, loadCompleteMusic); 
         muzyka.load(new URLRequest(file.url));//, context 

         } 


      }else{ 
       Alert.show("Zaznacz plik do odegrania!"); 
      } 

      test++; 
     } 

Playstart功能:

 private function play(pos:Number=0):void{ 
      playing=true; 
      kanal=muzyka.play(pos,trans); 
      refresh(); 
      addEventListener(Event.ENTER_FRAME, displayProgressInSec); 
     } 
+0

我不完全理解你问;但如果要我猜你在某处添加一个事件监听器,但从来没有将其删除;导致函数被多次调用。 – JeffryHouser

+0

您可以加入你的“停止()” - 功能?我想这个问题可能是有 – codingbuddha

回答

1

这里的问题是调用的addEventListener(Event.ENTER_FRAME,displayProgressInSec)每次你按下按钮,但从来没有移除它。每次添加侦听器时,它都会累积起来,并且所有都将响应enter-frame事件。

+0

好大解决呢:) 功能Odtwarzaj(tryb:数= 0){无效 \t \t \t \t VAR wybrany:对象= dataGridId.selectedItem; \t \t \t \t removeEventListener(Event.ENTER_FRAME,displayProgressInSec); \t \t \t \t如果(wybrany!= NULL){ – krootki