2014-10-16 16 views
0

看來我對整個數組的事情有問題。自己無法完成。 我願做這樣的事情:在數組中的每個項目上運行相同的函數

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是30個補間長與動畫alpha值0-15frame:淡出,15-30:淡入)

所以這是主意。就像一個幻燈片:mc_1淡出比mc_2淡入淡出比mc_3 ....等我可以用醜陋的方式做到這一點:複製函數四次,而不是將第一個副本中的「firstMc」更改爲mc_1,mc_2第二......但它沒有效率。所以我想問一些這些棘手的數組對象的幫助。

謝謝你的任何建議或例子!

回答

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,它包含要獲取的對象的字符串名稱。

取下報價,它應該更好的工作:

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

對於代碼的其餘部分,你很可能通過使用在時間軸上的動畫達到您想要的結果...

相關問題