2015-02-05 67 views
0

我是新來閃光的ActionScript端的同名電影剪輯,我可以創建一個函數告訴按鈕打開

我工作的地圖有說20點的彈出窗口(影片剪輯)和國家是按鈕,我剛剛被告知我需要增加60個。

下面是我一直在使用

english_movie.visible=french_movie.visible=turkish_movie.visible=false 

english_btn.addEventListener(MouseEvent.CLICK, englishButtonClick); 
french_btn.addEventListener(MouseEvent.CLICK, frenchButtonClick); 
turkish_btn.addEventListener(MouseEvent.CLICK, turkishButtonClick) 

function englishButtonClick(event:MouseEvent):void { 
english_movie.visible=true; 
english_movie.play(); 
french_movie.visible=turkish_movie.visible=false 
} 

function frenchButtonClick(event:MouseEvent):void { 
french_movie.visible=true; 
french_movie.play(); 
english_movie.visible=turkish_movie.visible=false 
} 

function turkishButtonClick(event:MouseEvent):void { 
turkish_movie.visible=true; 
turkish_movie.play(); 
english_movie.visible=french_movie.visible=false 
} 

即時通訊思想必須有這樣做一遍又一遍地複製代碼更簡單的方法的代碼示例。

任何幫助將不勝感激。

回答

0

以下是如何使用代碼簡化整個事情:每個btn對象是與一個電影對象相關的 。這可以通過字典來實現。

var btnToMovieAssociation:Dictionary = new Dictionary(); 
btnToMovieAssociation[english_btn] = english_movie; // repeat this line for every btn/movie pair 

現在你必須概括你的點擊處理程序。每個功能之間的主要區別 (除了使某個電影可見) 是因爲它們都使某些其他電影不可見。但實際上,僅僅使以前可見的電影無法呈現就足夠了。 爲此,請創建一個變量,以跟蹤當前可見的 影片。

var currentMovie:MovieClip = english_movie; 

正開始與english_movie變量對 程序沒有影響。你可以選擇其他的電影。如果這個變量被初始化,它將使下面的代碼更容易 。

現在您的功能有效地做到這一點:點擊按鈕可見

  • 播放這部電影的

    • 製作電影
    • 做出最後一部電影無形

    這裏的涼爽的一部分。您只能添加一個偵聽器。看看點擊事物的字典中是否有 ,並考慮下一個要顯示的電影 。

    addEventListener(MouseEvent.CLICK, buttonClick); 
    
    function buttonClick(event:MouseEvent):void 
    { 
        var movie:MovieClip = btnToMovieAssociation[event.target] 
        if (movie == null) 
          return; // nothing in the dictionary, it wasn't a button that was clicked. 
        movie.visible=true; 
        movie.play(); 
        currentMovie.visible = false; 
        currentMovie = movie; 
    } 
    

    有問題,這個解決方案:

    • 您還必須申報每一對,這仍然是繁瑣和容易埃羅。 (您必須輸入每個名稱兩次)
    • 如果您的按鈕由多個對象組成,則event.target可能會指向它們而不是整個按鈕。但只有 字典中的btns,並不是所有的單個部分, 字典中都沒有找到。這可以通過 在每個btn上設置mouseChildren = false;來繞開。
  • +0

    感謝您花時間幫助我解決這個問題。 它只適用於如果我列出所有的影片剪輯設置爲可見= false開始,考慮到所有的影片剪輯已放到字典中是否有更簡單的方法呢? – neale 2015-02-06 09:57:45

    +1

    您可以嘗試使用for..in循環遍歷字典中的對象並將其設置爲 – mitim 2015-02-06 10:23:45

    0

    我別的地方張貼了這個問題,並得到了這個響應

    var tl:MovieClip=this; 
    var mc:MovieClip; 
    var i:int; 
    var buttonA:Array=[english_btn,french_btn,turkish_btn]; 
    
    for(i=0;i<buttonA.length;i++){ 
    buttonA[i].addEventListener(MouseEvent.CLICK,buttonF); 
    tl[buttonA[i].name.split("_")[0]+"_movie"].visible = false; 
    } 
    
    function buttonF(e:MouseEvent):void{ 
    for(i=0;i<buttonA.length;i++){ 
    tl[buttonA[i].name.split("_")[0]+"_movie"].visible = false; 
    } 
    tl[e.currentTarget.name.split("_")[0]+"_movie"].visible=true; 
    } 
    

    偉大的工程。

    相關問題