对数组中的每个项运行相同的函数

时间:2014-10-16 23:08:42

标签: arrays actionscript-3 animation

我觉得整个阵列的问题都有问题。我自己无法接通。 我想做这样的事情:

var mcs:Array = ["mc_1","mc_2","mc_3","mc_4"];
var firstMc:Object = mcs.shift();
getStarted();

function getStarted();
{
    getChildByName("firstMc").addEventListener(Event.ENTER_FRAME, fadeOut);
}

function fadeOut(event:Event):void 
{ 
    if (firstMc.currentFrame >= 15) 
    { 
        firstMc.gotoAndStop(15);
        firstMc.removeEventListener(Event.ENTER_FRAME, fadeOut);
        firstMc = mcs.shift();
        fadeIn();
    } 
    else 
    { 
        firstMc.nextFrame(); 
    } 
}

function fadeIn(event:Event):void
{
    if (firstMc.currentFrame == 30) 
    { 
        firstMc.gotoAndStop(1);
        firstMc.removeEventListener(Event.ENTER_FRAME, fadeIn);
        getStarted();
    } 
    else 
    { 
        firstMc.nextFrame(); 
    } 
}

(mcs是具有动画alpha值的30帧长补间.0-15帧:淡出,15-30:淡入)

所以这就是主意。就像幻灯片一样:mc_1淡出而不是mc_2淡入和淡出mc_3 ....等我可以用丑陋的方式做到这一点:复制函数四次,而不是将第一个副本中的“firstMc”更改为mc_1,mc_2 in第二......但它效率不高。所以我想请求一些有关这些棘手的数组对象的帮助。

感谢您提出任何建议或示例!

1 个答案:

答案 0 :(得分:1)

您的代码非常令人困惑。所以我将介绍有关使用数组的部分。

在第一行:

var mcs:Array = ["mc_1","mc_2","mc_3","mc_4"];

您已存储了一系列字符串。您可以通过删除引号来存储实际对象,但字符串也可以工作。

因此,在您的情况下,当您使用:

声明对象时
var firstMc:Object = mcs.shift();

你实际在做的是从数组中获取第一项,这恰好是一个字符串。

所以你应该把它改成:

var firstMc:String = mcs.shift();

在getStarted中,你使用getChildByName,并正确传递一个字符串,但不是给它一个字符串引用你想要的对象的名字,你只是给它另一个字符串" firstMc"。你应该给它变量firstMc,它保存你想要获得的Object的String名称。

删除引文,它应该更好用:

function getStarted();
{
    getChildByName(firstMc).addEventListener(Event.ENTER_FRAME, fadeOut);
}

至于其余的代码,您可以通过在时间轴上使用动画来实现您想要的结果......