1

さて、セットアップは次のとおりです。

メイン タイムライン内に、MovieClip であるメニューがあります。このメニューは約 17 個の「ボタン」で構成されており、それぞれがサイトの異なるセクションを指しています。「ボタン」がクリックされると (2 つの例: menu_bag_button、menu_trashbag_button)、メニューがアニメーション化され、左に移動し、2 つのライブラリ アイテム (bag_container と close_btn) が右側に表示されます。どちらも「framecontainer」内にあります。

次に、メニューが左側にある間、この特定のボタンはメニュー アニメーションを繰り返してはならないため、どのフレームにあるかを見つける if ステートメントを実行しました。左側にある場合は、単純にフレーム コンテナーをクリアしてコンテンツを再度読み込みます。 .

問題は、別のリンクがクリックされたときに、次の 2 つのいずれかを行う必要があることです。メニューが中央にあり、コンテンツがロードされていない場合、メニューを右側にアニメーション化し、content/close_btn を「framecontainer にロードする」必要があります。 "; または、メニューが左側にある場合は、「framecontainer」をクリアして、対応するコンテンツをロードする必要があります。私は多くのことを試しましたが、これらのボタンはすべて「menu_mc」内にあるため、アクションスクリプトはルートを指し、次に「framecontainer」を指す必要があり、すべてが複雑になります。

何時間ものコーディングをせずにこれを行うための迅速でより良い方法があれば、それは素晴らしいことです...そうでなければ、今のところこの複雑な方法に固執する必要があります.

これが私の現在のコードです。コンテンツをクリアしないという事実を除いて、正常に機能するため、フレームをロードし続けて 1 つを閉じます。その背後にはまだ他のコンテンツがあります。

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

1 に答える 1

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

問題は、 MovieClip(root).addchild(container);と言うときです。、コンテナ変数の「内容」をルートの子として追加しています。var コンテナーの内容には、「コンテナー」と呼んだ手がかりがないため、 MovieClip(root).containerとは言えません。

ただし、次のように言うことができます。

container.addChild(bagLink);

var コンテナは MovieClip コンテナを指しているためです。

于 2010-05-25T10:17:30.920 に答える