2010-05-25 54 views
1

好了,所以這裏是設置:動作的孩子中3的addChild並清除第一個孩子

在主時間軸我有一個菜單,這是一個MovieClip。該菜單由大約17個「按鈕」組成,每個按鈕指向站點的不同部分。點擊一個「按鈕」(2個示例:menu_bag_button,menu_trashbag_button),菜單將動畫,向左移動,並且2個庫項目(bag_container和close_btn)應顯示在「framecontainer」的右側。

然後,當菜單在左邊時,這個特定的按鈕不能重複菜單動畫,因此我做了一個if語句來查找它所在的框架,如果它在左邊,它只是清除framecontainer和再次加載內容。

問題是,當單擊另一個鏈接時,它需要執行以下兩件事之一:如果菜單位於未加載內容的中央,則需要將菜單右側設置爲動畫,並將內容/ close_btn放入「framecontainer」;或者,如果菜單位於左側,則需要清除「framecontainer」並加載相應的內容。我嘗試了很多東西,但由於所有這些按鈕都在「menu_mc」中,動作必須指向根,然後才能指向「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 2010-05-25 08:37:12

+0

你應該只問每個問題一件事。一次嘗試解決一個問題對您來說是完美的。根據你的喜好提出許多不同的問題,但是如果你保持每一個問題的重點,那麼你會得到更好的答案。 – 2010-05-25 10:20:26

+0

對不起,我很含糊......我對此很陌生,所以我不知道如何提出這個問題。我會編輯一下 – steve 2010-05-25 10:43:07

回答

2

首先,我真的希望這不是「時間線」的代碼!我希望這個代碼在課堂上。

其次,我真的不喜歡使用「root」的想法。如果你打算不止一次地使用它,你可以爲它創建一個新的變量,輸入爲動畫片段,並引用它,而不是總是將它轉換爲動畫片段。例如

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(root).container

但是你可以說:

container.addChild(bagLink); 

由於VAR容器指向容器影片剪輯。

+0

你讓我困惑了一點......正如其他人所說,我要改進我的帖子,所以請回頭看看,因爲我確實需要幫助。 不幸的是,這個網站是一個設計課程中的項目,我們沒有時間做任何事情做我們需要做的事情,並在週三到期。我以前從未在flash中工作過,但我是過於雄心勃勃的設計師,希望將它變成kickass網站,因此我已經導致觀看在線教程......到目前爲止,每一個都完成了時間線動作。但是,此代碼位於放置在主時間軸上的動畫片段內。 查看我上面的編輯。 – steve 2010-05-25 10:46:30

+0

我得到它的工作!我使用「while」語句修復了它。我編輯上面添加它。現在有什麼辦法通過從數組列表中拉出內容,而不必做一個全新的功能? – steve 2010-05-25 13:50:14