2012-11-02 73 views
1

接下來的代碼是關於一個非常非常簡單的幻燈片演示。點擊後,我想顯示圖片(或瑞士法郎),並在同一時間讓其他人消失... 這是我的代碼,它工作正常,但在btn3,當我點擊,第二張圖片不消失。 我不知道爲什麼。你能否學習一些新的方法來充分重寫我的代碼?addChild和removeChild in flash AS3(動作腳本3)

import flash.display.Loader; 
    import flash.events.Event; 


    var my_first_swf_loading_ever:Loader=new Loader(); 
    my_first_swf_loading_ever.load(new URLRequest('1.jpg')); 
    var my_second_pic:Loader=new Loader(); 
    my_second_pic.load(new URLRequest('2.jpg')); 
    var my_3_pic:Loader=new Loader(); 
    my_3_pic.load(new URLRequest('pictures/3.jpg')); 

    btn.addEventListener(MouseEvent.CLICK, clicked); 

    function clicked(evt:Event):void 
    { 

    if (contains(my_second_pic)) { 
     removeChild(my_second_pic); 
     if (contains(my_3_pic)) { 
      removeChild(my_3_pic); 
     } 
    } 
    my_first_swf_loading_ever.x=120; 
    my_first_swf_loading_ever.y=120; 
    addChild(my_first_swf_loading_ever); 

    } 


    btn2.addEventListener(MouseEvent.CLICK, clicked2); 
    function clicked2(evt:Event):void 
    { 
     if (contains(my_first_swf_loading_ever)) { 
      removeChild(my_first_swf_loading_ever); 

      if (contains(my_3_pic)) { 
       removeChild(my_3_pic); 
      } 
     } 
     my_second_pic.x=120; 
     my_second_pic.y=120; 
     addChild(my_second_pic); 

    } 

    btn3.addEventListener(MouseEvent.CLICK, clicked3); 
    function clicked3(evt:Event):void 
    { 
     if (contains(my_first_swf_loading_ever)) { 
      removeChild(my_first_swf_loading_ever); 
      if (contains(my_second_pic)) { 
       removeChild(my_second_pic); 

      } 
     } 
     my_3_pic.x=120; 
     my_3_pic.y=120; 
     addChild(my_3_pic); 


    } 

回答

3

你應該把你的代碼格式化得整潔一些,因爲問題會更清晰。在下面幾行:

if (contains(my_first_swf_loading_ever)) { 
     removeChild(my_first_swf_loading_ever); 
    if (contains(my_second_pic)) { 
     removeChild(my_second_pic); 

}} 

來檢查第二畫面不執行,該代碼,如果你重構代碼,你可以看到爲什麼:

if (contains(my_first_swf_loading_ever)) // First check 
{ 
    removeChild(my_first_swf_loading_ever); 
    if (contains(my_second_pic)) // Second check is only reached if first check returns true 
    { 
     removeChild(my_second_pic); 
    } 
} 

重組爲:

if (contains(my_first_swf_loading_ever))  // First check 
{ 
    removeChild(my_first_swf_loading_ever); 
} 
if (contains(my_second_pic))     // Second check - not reliant on first 
{ 
    removeChild(my_second_pic); 
} 

這樣就可以進行兩項檢查。對於其他代碼也是如此,如果檢查是相反的,則在其他按鈕上會出現相同的問題。

這裏是一個很好的參考,你可以看看編碼時,看到不同的東西怎麼可以被格式化來幫助你的代碼的可讀性:http://techwiki.openstructs.org/index.php/AS3_Coding_Standards#Function_Declarations