2010-05-25 2 views
1

여기에 설정이 있습니다.actionscript 3 자식 내 addchild 및 첫 번째 자식 지우기

기본 타임 라인 내에는 MovieClip 인 메뉴가 있습니다. 이 메뉴는 약 17 개의 "버튼"으로 구성되어 있으며 각 버튼은 사이트의 다른 섹션을 가리 킵니다. "버튼"을 클릭하면 (예 : menu_bag_button, menu_trashbag_button) 메뉴가 움직이며 왼쪽으로 이동하고 2 개의 라이브러리 항목 (bag_container 및 close_btn)이 오른쪽에 모두 "framecontainer"내에 나타나야합니다.

왼쪽에 메뉴가있는 동안이 특정 단추는 메뉴 애니메이션을 반복해서는 안됩니다. 따라서 어떤 프레임이 있는지를 확인하는 if 문을 수행하고 왼쪽에있는 경우 framectaintainer를 지우고 내용을 다시로드합니다.

다른 링크를 클릭하면 두 가지 중 하나를 수행해야합니다. 즉, 메뉴가 중앙에 있고로드 된 내용이없는 경우 메뉴 오른쪽에 애니메이션을 적용하고 내용/close_btn을 "framecontainer"로 변경하십시오. 또는 메뉴가 왼쪽에 있으면 "framecontainer"를 지우고 해당 내용을로드해야합니다. 나는 많은 것들을 시도했지만,이 모든 버튼들은 "menu_mc"내에 있기 때문에, actionscript는 루트를 가리켜 야하고, "framecontainer"를 가리키면 모든 것이 뒤얽힌다.

시간을 들여 코딩하지 않아도되는 빠르고 좋은 방법이 있다면 그것은 최고 일 것입니다 ... 그렇지 않으면 나는 지금이 복잡한 방식을 고수해야합니다.

다음은 현재 코드입니다. 그 뒤에 다른 콘텐츠 여전히 존재, 그것은 분명히 내용이되지 않는다는 사실을 제외하고, 좋은 기능, 그래서 하나가 닫혀 있도록 프레임을로드 계속 :

import flash.display.*; 
import fl.transitions.*; 
import flash.events.MouseEvent; 

//Stopping on this frame (805) so the menu will be in place to interact with 
stop(); 

//framecontainer location/size for the content to be loaded. 
//Not sure if the parameters below it are absolutely necessary. 
var framecontainer:MovieClip = new MovieClip(); 
framecontainer.width = 450; 
framecontainer.height = 450; 
framecontainer.x = 450; 
framecontainer.y = 0; 

//adding the framecontainer so that the content can be loaded into it. 
//again, not sure if this is necessary yet 
MovieClip(root).addChild(framecontainer); 




//FIRST MENU ITEM, "BAG" 
//If we can get the framecontainer to work, I don't think I'll have to create 
//a custom closeBtn for each and every link. I'll be able to just use a generic 
//closeBtn and have it clear the framecontainer and continue the animation. 

var closebagBtn:close_btn = new close_btn(); 
closebagBtn.x = 0; 
closebagBtn.y = 0; 

var bagFrame:MovieClip = new bag_frame_mc(); 
bagFrame.x = 900; 
bagFrame.y = 0; 


menu_bag_button.addEventListener(MouseEvent.MOUSE_UP, bagClick); 
function bagClick(event:MouseEvent):void{ 
    if(MovieClip(root).currentFrame == 850) { 
// the next line does nothing, but it's supposed to clear 
MovieClip(root).framecontainer.clear(); 
} 
//Below, I need to add bagFrame and closebagBtn into framecontainer, 
//but I don't know how. Tried adding ".framecontainer" in front of addchild 
//but got error saying that bagClick (function above) is undefined. 
else { 
MovieClip(root).addChild (bagFrame); 
MovieClip(root).addChild (closebagBtn); 
MovieClip(root).gotoAndPlay(806); 
} 
} 
closebagBtn.addEventListener(MouseEvent.MOUSE_UP, bagClose); 
function bagClose (event:MouseEvent):void{ 
MovieClip(root).removeChild(bagFrame); 
MovieClip(root).removeChild(closebagBtn); 
MovieClip(root).gotoAndPlay(850); 
} 





//SECOND MENU ITEM, "TRASHBAG" 

var closetrashbagBtn:close_btn = new close_btn(); 
closetrashbagBtn.x = 0; 
closetrashbagBtn.y = 0; 

var trashbagFrame:MovieClip = new trashbag_frame_mc(); 
trashbagFrame.x = 900; 
trashbagFrame.y = 0; 

menu_trashbag_button.addEventListener(MouseEvent.MOUSE_UP, trashbagClick); 
function trashbagClick(event:MouseEvent):void{ 
    if(MovieClip(root).currentFrame == 850) { 
// the next line does nothing, but it's supposed to clear 
MovieClip(root).framecontainer.clear(); 
} 
//Below, I need to add trashbagFrame and closebagBtn into framecontainer, 
//but I don't know how. Tried adding ".framecontainer" in front of addchild 
//but got error saying that bagClick (function above) is undefined. 
else { 
} 
else { 
MovieClip(root).addChild (trashbagFrame); 
MovieClip(root).addChild (closetrashbagBtn); 
MovieClip(root).gotoAndPlay(806); 
} 
} 
closetrashbagBtn.addEventListener(MouseEvent.MOUSE_UP, trashbagClose); 
function trashbagClose (event:MouseEvent):void{ 
MovieClip(root).removeChild(trashbagFrame); 
MovieClip(root).removeChild(closetrashbagBtn); 
MovieClip(root).gotoAndPlay(850); 
} 

가 /////// /////////////////////////////////////////////////////////////////// ///// 새로운, 기능 코드 (도움이 필요 정제) : 모든

import flash.display.*; 
import fl.transitions.*; 
import flash.events.MouseEvent; 

stop(); 

var menuList:Array = [menu_bag, menu_chips, menu_coke, menu_cup, menu_deodorant, menu_fork, menu_knife, menu_lighter, menu_milk, menu_pill, menu_rings, menu_shampoo, menu_spoon, menu_straw, menu_toothbrush, menu_trashbag, menu_water]; 



var closeBtn:close_btn = new close_btn(); 
closeBtn.x = 0; 
closeBtn.y = 0; 

closeBtn.addEventListener(MouseEvent.MOUSE_UP, contentClose); 
function contentClose (event:MouseEvent):void{ 
    while(MovieClip(root).numChildren > 1) 
    { 
     MovieClip(root).removeChild(MovieClip(root).getChildAt(MovieClip(root).numChildren - 1)); 
    } 
MovieClip(root).gotoAndPlay(850); 
} 




var bagFrame:MovieClip = new bag_frame_mc(); 
bagFrame.x = 900; 
bagFrame.y = 0; 

menu_bag.addEventListener(MouseEvent.MOUSE_UP, bagClick); 
function bagClick(event:MouseEvent):void{ 
    if(MovieClip(root).currentFrame == 850) { 
    while(MovieClip(root).numChildren > 1) 
    { 
     MovieClip(root).removeChild(MovieClip(root).getChildAt(MovieClip(root).numChildren - 1)); 
    } 
MovieClip(root).addChild (bagFrame); 
MovieClip(root).addChild (closeBtn); 
} 
else { 
MovieClip(root).addChild (bagFrame); 
MovieClip(root).addChild (closeBtn); 
MovieClip(root).gotoAndPlay(806); 
} 
} 

var trashbagFrame:MovieClip = new trashbag_frame_mc(); 
trashbagFrame.x = 900; 
trashbagFrame.y = 0; 

menu_trashbag.addEventListener(MouseEvent.MOUSE_UP, trashbagClick); 
function trashbagClick(event:MouseEvent):void{ 
    if(MovieClip(root).currentFrame == 850) { 
    while(MovieClip(root).numChildren > 1) 
    { 
     MovieClip(root).removeChild(MovieClip(root).getChildAt(MovieClip(root).numChildren - 1)); 
    } 
MovieClip(root).addChild (trashbagFrame); 
MovieClip(root).addChild (closeBtn); 
} 
else { 
MovieClip(root).addChild (trashbagFrame); 
MovieClip(root).addChild (closeBtn); 
MovieClip(root).gotoAndPlay(806); 
} 
} 
+0

"작동하지 않는다"는 것이 정확히 무엇을 의미합니까? 오류/예외가 발생 했습니까? 그렇다면 무엇을 말 했는가? – Amarghosh

+0

질문 당 한 가지만 물어보십시오. 그리고 한 번에 한 가지 문제를 해결하려고 노력하는 것이 당신의 온건함에 좋을 것입니다. 원하는만큼 많은 다른 질문을하십시오. 그러나 각 질문을 집중하면 더 나은 대답을 얻을 수 있습니다. –

+0

내가 막연했다는 것이 유감입니다 ... 저는이 문제에 대해 아주 새로운 질문을 던지기 때문에 정확히 어떻게 해야할지 모르겠습니다. 나는 그것을 약간 편집 할 것이다 – steve

답변

2

첫째, 난 정말이 없다 "타임 라인"코드 바랍니다! 나는이 코드가 클래스 내부에 있기를 바란다.

둘째로, 나는 "루트"를 사용하는 아이디어를 정말로 좋아하지 않습니다. 그리고 만약 당신이 그것을 한 번 이상 사용하고자한다면, 새로운 무언가를 만들 수 있고, 무비 클립으로 타이핑하고, 무비 클립으로 항상 캐스팅하는 대신 그것을 참조 할 수 있습니다. 예 :

var target:MovieClip = root as MovieClip; 
target.addChild(container); 

이 코드는 기본 타임 라인에있는 경우 당신도 루트를 참조 할 필요가 없습니다 (하지만 그것이 것처럼 보이지 않는다).

을 다음 라인에 문제가

있다 ... 당신에게 실제 질문에 대답하려면 :

MovieClip(root).addchild (container); 
MovieClip(root).container.addChild (bagLink); 
MovieClip(root).addChild (closeBtn); 
MovieClip(root).gotoAndPlay(806); 

문제는 당신이 무비 클립 (루트) .addchild (컨테이너)를 말할 때;, 컨테이너 변수의 "내용"을 루트의 하위 항목으로 추가합니다. var 컨테이너의 내용에는 "컨테이너"라는 단서가 없으므로 MovieClip (컨테이너)이라고 말할 수는 없습니다.

그냥 말할 수 그러나 :

container.addChild(bagLink); 

var에 컨테이너는 컨테이너 무비 클립을 가리키는 때문에.

+0

당신은 나를 조금 혼란스럽게했다 ... 다른 사람들이 말했듯이 나는 나의 게시물을 다듬어서 정말로 도움이 필요하다는 것을 다시 확인해 보겠다. 슬프게도,이 웹 사이트는 우리가 정말로해야 할 일을 전혀하지 않는 디자인 과정의 프로젝트이며, 수요일에 예정되어 있습니다. 나는 전에 플래시에서 일한 적이 없지만 지나치게 야심 찬 디자이너 인 나는 그것을 kickass 웹 사이트로 만들고 싶다. 따라서 온라인 자습서를 보게되었다. 지금까지 한 명씩 타임 라인 액션 스크립트를 작성했다. 그러나이 코드는 기본 타임 라인에있는 무비 클립 내에 있습니다. 위의 내 편집을 확인합니다. – steve

+0

나는 그것을 작동하게했다!! "while"문을 사용하여 수정했습니다. 추가 한 내용을 편집했습니다. 이제 배열 목록에서 내용을 추가하고 완전히 새로운 기능을 수행 할 필요가없는 방법이 있습니까? – steve