2010-05-25 55 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