actionscript删除movieclip儿童

时间:2012-08-20 06:44:53

标签: actionscript-3 flash animation actionscript

我在这个类中有一个文档类,我动态创建影片剪辑,将它们存储在一个数组中,最后使用addChild将它添加到舞台上。这一切都很好,问题是虽然我试图通过数组删除movieClips并且它抛出一个错误:

1034:类型强制失败:无法将[] @ 26be1fb1转换为flash.display.DisplayObject。

这是我的代码:

    // Note i have declared the array outside the function, so that's not an issue
    function x (e:MouseEvent){


        if (thumbnails.length !== 0){ // Determine if any movieclips have already been created on stage and delete them
            for(var ctr:int = 0; ctr < thumbnails.length;ctr++ ){
                removeChild(thumbnails[ctr]);

            }

        }
        for (var i: int = 0;i < userIput; i++){ // Loop through and create instances of symbol


            var thumb:Thumbnail = new Thumbnail();

            thumb.y = 180; // Set y position
            thumb.x = 30 + ((thumb.width + 10) * i); 


            addChild(thumb);

            thumbnails[i] = [thumb]; // Add to array
        }
    }

3 个答案:

答案 0 :(得分:1)

当您从MovieClip检索Array时,需要先将其DisplayObject强制转换为<{1}},然后再尝试将其删除:

    if (thumbnails.length !== 0){ // Determine if any movieclips have already been created on stage and delete them
        for(var ctr:int = 0; ctr < thumbnails.length;ctr++ ){
            removeChild(DisplayObject(thumbnails[ctr]));

        }

    }

或者,您可以考虑使用基类型设置为Vector的{​​{1}}(Array的类型安全版本):

DisplayObject

如需进一步阅读,请查看type conversionVectors上的Adobe文档。

<强>更新

而不是向var thumbnails:Vector.<DisplayObject> = new Vector.<DisplayObject>(); thumbnails.push(new MovieClip()); this.addChild(thumbnails[0]); this.removeChild(thumbnails[0]); 添加Thumbnail的实例,而下一行实际上是在缩略图Array中添加了一个包含单个元素的Array(实际上你正在创建一个多维Array):

Array

请尝试以下任一方法:

// You're assigning an array literal with a single element 
// to this element of the the thumbnails array
thumbnails[i] = [thumb]; 

答案 1 :(得分:1)

出现的错误告诉您Flash Player无法将[]@26be1fb1转换为DisplayObject。 []@26be1fb1为您提供了一个提示无法转换地址的对象类型的提示。 []是此处对象的类型,表示类型Array,因此当调用removeChild()时,您尝试将数组传递给它,但该方法需要DisplayObject。

为什么会发生这种情况

您的代码有一个非常简单但可能不引人注意的问题,即在此代码行中:

thumbnails[i] = [thumb]; // Add to array

使用[]周围的thumb将拇指放入数组中。所以你的代码实际上正在做的是它向数组thumb添加一个带有单个元素(thumbnails)的数组。之后,您将拥有一个包含单个元素的数组。

解决方案

将以上行更改为:

thumbnails[i] = thumb; // Add to array

这可以解决您的问题。

答案 2 :(得分:0)

对于你认为的问题:

使用Vector而不是Array 将数组项投射到Thumbnail类


但主要的罪魁祸首可能是你永远不会清除数组中的项目,你从父/舞台上删除它们,但是你没有将它们从数组中删除...同时添加项目数组中的特定位置将导致不稳定的行为

你添加它们:
t [0] = item0_0
t [1] = item0_1
t [2] = item0_2
t [3] = item0_3

然后从舞台上移除item0_0,item0_1,item0_2,item0_3,但将它们留在阵列中 接下来你添加例如2个新的

t [0] = item1_0
t [1] = item1_1

所以你有:
在舞台上:
ITEM1_0
item1_1

在数组中:
t [0] = item1_0
t [1] = item1_1
t [2] = item0_2
t [3] = item0_3



这应该有效:

var thumbnails:Vector.<Thumbnail> = new Vector.<Thumbnail>();

function x (e:MouseEvent) {

    var thumb:Thumbnail;

    for each(thumb in thumbnails){
        removeChild(thumb);
    }

    thumbnails = new Vector.<Thumbnail>(); // clear Vector by re-initiating it

    for (var i: int = 0;i < userIput; i++){ 
        thumb = new Thumbnail();

        // ...

        addChild(thumb);

        thumbnails.push(thumb);
    }
}