AS3来自图书馆的随机响亮的动画片段,无需重复

时间:2012-03-27 09:15:46

标签: actionscript-3 flash random

每次我解决图像时,我都会有一个差异游戏,然后我点击它会从库中加载另一个MC。

以下是从库中随机加载MC的代码:

var showMcNum:Number = 0;
var movieList:Array = [mc1,mc2,mc3];
function getRandomMovie():MovieClip
{
    return new movieList[Math.floor(Math.random()*movieList.length)];
}
nextBtn.addEventListener(MouseEvent.CLICK, nextClick);
function nextClick(event:MouseEvent):void
{
    var mc:MovieClip = getRandomMovie();
    addChild(mc);
    mc.x = stage.stageWidth / 2;
    mc.y = stage.stageHeight / 2;
}

我想每次点击下一个按钮,然后它会从库中加载另一个MC而不重复那些MC。

2 个答案:

答案 0 :(得分:1)

如果您不想重复使用MC,请在退回时将其从列表中删除。

function getRandomMovie():MovieClip
{
    var index:int = Math.floor(Math.random()*movieList.length);
    var mcClass:Class = movieList.splice(index,1)[0];
    return new mcClass();
}

这是一个使用第二个数组的版本,允许您根据TheSHEEEP的评论重复列表:

function getRandomMovie():MovieClip
{
    if(!movieList.length) {
        movieList = spareList;
        spareList = [];
    }
    var index:int = Math.floor(Math.random()*movieList.length);
    var mcClass:Class = movieList.splice(index,1)[0];
    spareList.push(mcClass);
    return new mcClass();
}

删除上一个MovieClip

为了删除之前的MovieClip,您应该在nextClick函数之外保留它的记录,以便在获取下一个之前将其删除:

//declare mc outside
var mc:MovieClip;
function nextClick(event:MouseEvent):void
{
    //remove mc first
    if(mc && mc.parent) removeChild(mc);
    //(optional) free up old mc for garbage collection
    //now replace the contents of mc with a new random instance
    mc = getRandomMovie();
    addChild(mc);
    mc.x = stage.stageWidth / 2;
    mc.y = stage.stageHeight / 2;
}

当然,您可能需要做的不仅仅是删除以前的mc。在将mc引用指向新对象之前,应该通过停止执行任何内部代码并删除任何侦听器来释放另一个用于垃圾回收。

答案 1 :(得分:0)

感谢@shanethehat的回答。但是在加载最后一个MC并再次按下下一个按钮后,它将提示错误,这是因为没有更多MC从库中加载。

我修改了代码的abit,以便在加载库中的所有MC并且按钮知道它并且没有任何错误时。

var showMcNum:Number = 0;
var movieList:Array = [mc1,mc2,mc3];

function getRandomMovie():MovieClip
{
    var index:int = Math.floor(Math.random() * movieList.length);
    var mcClass:Class = movieList.splice(index,1)[0];
    return new mcClass();
}

nextBtn.addEventListener(MouseEvent.CLICK, nextClick);

//declare mc outside;
var mc:MovieClip;
function nextClick(event:MouseEvent):void
{
    if (showMcNum < 3)
    {
        //remove mc first
        if (mc && mc.parent)
        {
            removeChild(mc);
        }//(optional) free up old mc for garbage collection
        //now replace the contents of mc with a new random instance
        mc = getRandomMovie();
        addChild(mc);
        mc.x = stage.stageWidth / 2;
        mc.y = stage.stageHeight / 2;
        showMcNum++;
    }
    else
    {
        //code what you wanna do here after all the MC is loaded
    }
}

mc = getRandomMovie();
addChild(mc);
mc.x = stage.stageWidth / 2;
mc.y = stage.stageHeight / 2;
showMcNum++;