2010-05-25 1 views
1

Хорошо, так вот установка:3 AddChild ActionScript в ребенке и очистить первый ребенок

В основной временной шкале у меня есть меню, которое является MovieClip. Это меню состоит из 17 "кнопок", каждый из которых указывает на другой раздел сайта. Когда нажимается «кнопка» (2 примера: menu_bag_button, menu_trashbag_button), меню будет анимироваться, перемещаться влево и два элемента библиотеки (bag_container и close_btn) должны отображаться справа, как внутри «framecontainer».

Затем, в то время как меню находится слева, эта конкретная кнопка не должна повторять анимацию меню, поэтому я сделал утверждение if, в котором он находится, и если он слева, он просто очищает framecontainer и снова загружает содержимое.

Проблема заключается в том, что при нажатии другой ссылки необходимо выполнить одну из двух задач: если меню находится в центре без загрузки содержимого, ему необходимо анимировать меню вправо и загрузить содержимое/close_btn в "framecontainer"; или, если меню находится слева, ему необходимо очистить «framecontainer» и загрузить соответствующий контент. Я пробовал много вещей, но поскольку все эти кнопки находятся в «menu_mc», ActionScript должен указывать на корень, THEN - «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

Прежде всего, я действительно надеюсь, что это не «хронология» код! Я надеюсь, что этот код внутри класса.

Во-вторых, мне действительно не нравится идея использования «root». И если вы собираетесь использовать его более одного раза, вы можете просто создать новый var для, набрав как мувиклип, и ссылку, которая вместо того, чтобы всегда бросать его в мувиклип. например

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); 

проблема заключается в том, что когда вы говорите MovieClip (корень) .addchild (контейнер);, вы добавляете «содержимое» переменной контейнера в качестве дочернего элемента root. Содержимое контейнера var не имеет понятия, которое вы назвали «контейнером», поэтому вы не можете сказать MovieClip (root) .container.

Однако вы можете просто сказать:

container.addChild(bagLink); 

Поскольку контейнер вар указывает на контейнер MovieClip.

+0

Вы немного смутили меня ... как говорили другие, я собираюсь уточнить свое сообщение, поэтому, пожалуйста, зайдите, поскольку мне действительно нужна помощь. К сожалению, этот веб-сайт является проектом в курсе дизайна, где мы действительно не имеем никакого времени делать то, что нам нужно делать, и оно должно состояться в среду. Я никогда раньше не работал во флеш-памяти, но я являюсь чрезмерно амбициозным дизайнером, я хочу сделать его сайтом kickass, поэтому я привел к просмотру онлайн-руководств ... каждый из них до сих пор выполнял ActionScript. Этот код, однако, находится внутри мувиклипа, который помещается на основную временную шкалу. Проверьте мои правки выше. – steve

+0

Я получил работу! Я исправил его с помощью инструкции while. Я отредактировал выше, добавил его. Есть ли способ добавить контент, вытащив его из списка массивов и не выполняя абсолютно новую функцию? – steve