我在这个类中有一个文档类,我动态创建影片剪辑,将它们存储在一个数组中,最后使用addChild将它添加到舞台上。这一切都很好,问题是虽然我试图通过数组删除movieClips并且它抛出一个错误:
这是我的代码:
// 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
}
}
答案 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 conversion和Vectors
上的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);
}
}