Ошибка типа: Ошибка № 1034: сбой приведения типа при addChild();

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()так что я не знаю:(

1 ответ

Ваша проблема в том, что вы имеете в виду в addChild() на самом деле массив, а не клип. Ваш RandomArray на самом деле является массивом массивов. Это потому что splice() Метод возвращает массив с удаленными элементами, в отличие от одного удаляемого элемента.

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html

Чтобы это исправить, вы должны обратиться к первому элементу возвращенного массива сплайсинга, когда хотите добавить его в новый массив. Вот что вам нужно сделать:

newArray.push(array.splice(Math.floor
(Math.random()*array.length), 1)[0]);

Обратите внимание на [0] после вызова splice().

Надеюсь это поможет!

Другие вопросы по тегам