在AS3中从库中加载和卸载内容

时间:2014-04-08 14:43:57

标签: actionscript-3 flash

我正在做一个flash项目,但我是动作脚本的新手。 我在主页面上有一个菜单,我想在点击菜单项时显示其他页面。

我知道如何从库中加载动画片段,但我不知道如何在屏幕上指定它们的位置以及如何使它们出现在特定图层中。

点击其他菜单项时是否需要卸载以前的内容? 如果我不卸载它们,它们会相互叠加并使程序变重吗?!

我为每个菜单项添加了一个图层,并在每个菜单项中添加了以下代码(对于每个项目都有不同的类):

import flash.display.MovieClip;

btn_msg.addEventListener(MouseEvent.CLICK, ShowMessegePage);

function ShowMessegePage(event:MouseEvent):void
{
var msg_page:MessegePage = new MessegePage();
    addChild(msg_page);

msg_page.x = 495;
msg_page.y = 323;

}

我在第一帧中放置了一个图像作为主页面。然后我在不同的图层上放置了一些按钮。为了在点击每个按钮的同时加载页面,我添加了上面的代码。

当我点击按钮A时,加载了页面A,当我点击按钮B时,页面B被加载,依此类推。如何再次查看主页面?我已经为主页面添加了一个按钮,但出于某种原因我不会从库中加载它,它位于第一帧和加载内容之下。我的问题是如何删除加载的内容,以便我可以再次看到主页?当我点击每个按钮然后加载新内容时,我应该删除以前加载的所有内容吗?

1 个答案:

答案 0 :(得分:2)

从库中加载MovieClip:

var mc:MovieClip = new MyClipID();
parentLayer.addChild(mc); // parentLayer can be any DisplayObjectContainer, even the stage

定位加载的剪辑:

mc.x = 15;
mc.y = 30;

删除已加载的剪辑:

if(mc.parent)
{
    mc.parent.removeChild(mc);
}

将剪辑放置在特定的"层" (指数):

parentLayer.addChildAt(mc, 0); // this will place it behind everything on parentLayer

更新 要回答您的最新问题,是的,您删除之前加载的剪辑,然后再添加新剪辑。然后,当您想再次显示主图像时,您只需删除当前加载的剪辑。

UPDATE2: 在显示新页面之前跟踪当前加载的页面并将其删除的示例:

import flash.display.MovieClip;
import flash.display.DisplayObject;

var currentPage:DisplayObject;

btn_msg.addEventListener(MouseEvent.CLICK, ShowMessagePage);
btn_msg2.addEventListener(MouseEvent.CLICK, ShowMesssagePage2);

function ShowMessagePage(event:MouseEvent):void
{
    removeCurrentPage(); // remove the old page
    var msg_page:MessagePage = new MessagePage();
        addChild(msg_page);

    msg_page.x = 495;
    msg_page.y = 323;
    currentPage = msg_page; // keep track of the current page
}

function ShowMessagePage2(event:MouseEvent):void 
{
    removeCurrentPage(); // remove the old page
    var msg_page2:MessagePage2 = new MessagePage2();
        addChild(msg_page2);

    msg_page2.x = 495;
    msg_page2.y = 323;
    currentPage = msg_page2; // keep track of the current page
}

function removeCurrentPage():void
{
    if(currentPage && currenPage.parent)
    {
        currentPage.parent.removeChild(currentPage);
    }
}