2012-11-02 8 views
1

다음 코드는 아주 간단한 슬라이드 쇼입니다. 클릭 후 그림 (또는 swf)을 표시하고 동시에 다른 사람들이 사라지게합니다 ... 이것은 내 코드이며 제대로 작동하지만 btn3을 클릭하면 두 번째 그림이 사라지지 않습니다. 이유를 모르겠습니다. 내 코드를 충분히 재 작성하는 새로운 방법을 배울 수 있습니까?플래시 AS3 (액션 script3)에서 addChild 및 removeChild

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

: 여기

하면 코드의 가독성을 돕기 위해 포맷 할 수있는 방법을 여러 가지보고 코딩 할 때 한 번 봐 가질 수있는 좋은 참고이다