AS3延迟删除displayObject

时间:2014-04-09 20:08:39

标签: actionscript-3 flash

我通过从库中加载一些页面(here

中的更多细节来制作菜单

每个页面都有一个动画。这就像一扇门打开和关闭,几乎像this。 我已使用此代码删除旧页面并添加新页面:

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

var currentPage:DisplayObject;

 btn_msg.addEventListener(MouseEvent.CLICK, ShowMessagePage);

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

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

问题是它会在门关闭之前移除旧页面。 是否可以延迟删除旧页面? 这是我对flash的第一次认真体验,所以我对动作不太了解。

更新

这是我尝试使用计时器,以便延迟删除旧页面:

import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.display.DisplayObject;
import flash.utils.Timer;
import flash.events.TimerEvent;


var currentPage:DisplayObject;
var msg_page:MessegePage = new MessegePage();
var gallery_index:GalleryPage = new GalleryPage();
var film_index:FilmGallery = new FilmGallery();

var myTimer:Timer = new Timer(9000,1);

myTimer.addEventListener(TimerEvent.TIMER, removeCurrentPage);

btn_msg.addEventListener(MouseEvent.CLICK, ShowMessegePage);
btn_img.addEventListener(MouseEvent.CLICK, ShowGalleryPage);
btn_film..addEventListener(MouseEvent.CLICK, ShowFilmPage);

function ShowMessegePage(event:MouseEvent):void
{   
addChild(msg_page);
msg_page.x = 495;
msg_page.y = 323;
msg_page.gotoAndPlay("msg");
currentPage = msg_page;
myTimer.start();
}

function ShowGalleryPage(event:MouseEvent):void
{
addChild(gallery_index);
gallery_index.x = 495;
gallery_index.y = 323;
gallery_index.gotoAndPlay("indexofgallery");
currentPage = gallery_index;
myTimer.start();
}

function ShowFilmPage(event:MouseEvent):void
{
addChild(film_index);
film_index.x = 495;
film_index.y = 323;
film_index.gotoAndPlay("film");
currentPage = film_index;
myTimer.start();    
 }

 function removeCurrentPage(event:TimerEvent):void
{

if(currentPage && currentPage.parent)
{
    currentPage.parent.removeChild(currentPage);
}
StopTimer();
}

function StopTimer():void
{
myTimer.stop();
}

但它删除了正在加载的新页面! 我想我应该以某种方式保留旧页面......

更新2:

我尝试使用带有2个单元格的数组。 当我单击每个按钮时,DisplayObject将被添加到数组中,并调用一个函数来检查数组的其他单元格是否包含对象。 如果它包含一个对象,它将被删除。

我尝试为我的想法编写代码,但它没有正确添加和删除对象的数据!

2 个答案:

答案 0 :(得分:0)

最简单:setTimeout()。不完美,但它会解决你的问题。最好的方法是知道新动画是否已完成,但它会为您提供某种复杂的解决方案。这是最简单的,但不要过度使用它,因为它有它的弱点。

答案 1 :(得分:0)

如果每个页面上都有MovieClip,那么您应该可以在添加新页面后删除旧页面:

function ShowMessagePage(event:MouseEvent):void
{
     var msg_page:MessagePage = new MessagePage();
     addChild(msg_page); // load new page

     removeCurrentPage(); // remove the old page

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