我有一个用于保存影片剪辑的数组,我希望能够使用该数组一次更改所有这些数组。现在,我可以使用array[0,1,2,3,4,5,6,7,8...].changestuff
来做,但是有60个左右的动画片段,它变得笨拙。有没有更简单的方法来遍历整个数组并将更改应用于存储在?
答案 0 :(得分:1)
如果你有一个类似这样的MovieClip数组:
var a:Array = new Array;
for ( var j:int = 0; j < 10; j++ )
a[j] = new MovieClip;
你有3种循环方式并影响其中的所有MovieClip。第一个是循环的基本:
var len:int = a.length;
for ( var i:int = 0; i < len; i++ )
{
var mc:MovieClip = a[i];
trace( mc );
}
循环的基本循环是循环数组的最快方法。您只需要使用括号运算符在特定索引处找到MovieClip。 a[i]
将返回当前索引处的MovieClip(例如a[0]
将返回数组开头的MovieClip,a[1]
下一个,等等。
你也可以做一个for..each:
for each( var mc:MovieClip in a )
trace( mc );
For..each循环比正常for循环略慢,但是具有直接访问对象的额外好处,已经已经转换。它可以很方便
最后使用forEach()
方法:
a.forEach( this._loopFunc );
private function _loopFunc( mc:MovieClip, index:int, a:Array ):void
{
trace( mc + " is at index " + index + " in array " + a );
}
我从未真正看到forEach()
在任何地方使用过,但您可能会发现它很有用。对于回调,您需要声明3个参数,对象,索引和数组本身。
您可以在Array文档中找到更多信息:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html
答案 1 :(得分:0)
另一种方法是使用:
for(var item in collection) { ... }
未列在链接中。
答案 2 :(得分:-1)
一次操作整个数组的最佳方法是使用map方法。
来自Adobe LiveDocs的mapping示例
public function arrayMap() {
var arr:Array = new Array("one", "two", "Three");
trace(arr); // one,two,Three
var upperArr:Array = arr.map(toUpper);
trace(upperArr); // ONE,TWO,THREE
}
private function toUpper(element:*, index:int, arr:Array):String {
return String(element).toUpperCase();
}
在你的情况下,你只需编写一个回调方法来操纵你的影片剪辑,但必要时会返回一个MovieClip而不是String。