2013-05-19 65 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