import flash.display.MovieClip;
var clip1:clip01 = new clip01;
var clip2:clip02 = new clip02;
var clip3:clip03 = new clip03;
var clip4:clip04 = new clip04;
var clip5:clip05 = new clip05;
var files:Array = [clip1,clip2,clip3,clip4,clip5];
function randomizeArray(array:Array):Array
{
var newArray:Array = new Array();
while (array.length > 0)
newArray.push(array.splice(Math.floor
(Math.random()*array.length), 1));
return newArray;
}
var RandomArray:Array = randomizeArray(files);
trace(RandomArray[0]);
trace(clip1);
//var c:MovieClip = MovieClip(RandomArray[0]);
//addChild(c); not working :(
addChild(RandomArray[0]); // I want something like this!! Here i got err..
addChild(clip1);
编译器消息:
[object clip03]
[object clip01]
TypeError: Error #1034: Type Coercion failed: cannot convert []@3ea4aee1 to flash.display.DisplayObject.
at RandomVideo_fla::MainTimeline/frame1()
我从trace()
知道我有对象,那么可能是什么问题?
我将MC对象传递给addChild()
,所以我不知道:(
答案 0 :(得分:0)
你的问题是你在addChild()
中所指的实际上是一个数组,而不是一个影片剪辑。 RandomArray实际上是一个数组数组。这是因为splice()
方法返回一个包含已删除元素的数组,而不是您要删除的元素。
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html#splice()
要解决此问题,当您要将其添加到新数组时,必须引用返回的splice数组的第一个元素。以下是您需要做出的更改:
newArray.push(array.splice(Math.floor
(Math.random()*array.length), 1)[0]);
在splice()调用之后注意[0]。
希望这有帮助!