我正在尝试将一些Sprite对象添加为数组的内容,我希望能够从舞台上“清除”它们。我认为如果涉及加载器,我需要做
_imgArray[i].close();
_imgArray[i].unload();
如果我使用精灵,我可以这样做:
removeChild(_imgArray[i]);
以上工作都没有。 WHY ???
有关我如何设置的示例和/或说明,请参阅Joel的帖子here ...但请注意,他没有包含从视图中删除它们的参考。
目前我尝试:
for(i = 0; i < _localXML.length(); i++)
{
var tmp:BMLink = new BMLink(_localXML[i], _bw, _bh, i);
_imgArray[i] = tmp;
_imgArray[i].x = (_bw + _mainpad) * i;
_base.addChild(_imgArray[i]);
}
但这不起作用。 如果有人能向我解释为什么这不是正确的语法,我会很高兴。 填充数组的类实例都是扩展精灵,但它们在w / progress事件等中都有自己的独立加载器。
JML
答案 0 :(得分:0)
您可以使用destroy方法创建一个Interface IDestroy,该方法将管理所有清理/删除内容:
public interface IDestroy{
function destroy():void;
}
public class MySprite extends Sprite implements IDestroy {
..
public function destroy():void{
// remove events
..
// remove loader
..
//remove from parent
if (parent!==null){
parent.removeChild(this);
}
// etc.. more cleaning
}
}
然后当你有一个IDestroy实例的对象时,可以调用destroy方法
if (myObject is IDestroy){
IDestroy(myObject).destroy();
}
或其他方式
var id:IDestroy=myObject as IDestroy;
if (id!==null)
id.destroy();
编辑:
我不明白为什么我在评论中提供的任何方法都不起作用,但_base.removeChild(_imgArray[i])
会:
addChild
和removeChild
仅接受DisplayObject
作为参数,因此,如果您可以执行_base.addChild(_imgArray[i])
,则表示_imgArray[i]
继承自DisplayObject 和 _imgArray [i]有父母。
所以var myDisplayObject:DisplayObject=_imgArray[i] as DisplayObject;
不会返回null,你可以使用myDisplayObject.parent.removeChild(myDisplayObject);
来解决你的问题的一般方法,而不依赖你的_base DisplayObjectContainer(MovieClip / Sprite /...)
答案 1 :(得分:0)
行;我终于通过一系列的反复试验弄明白了。 似乎我试图删除我的主类精灵(这个)的孩子,而不是我添加孩子的子精灵。
对不起噪音,但是如果你发现你做不到的话,那就是记录
this.removeChild(_imgArray[i]);
这不是因为你没有正确的语法,而是因为你可能没有
_imgArray[i]
在您的显示列表层次结构的特定点...所以......
_base.removeChild(_imgArray[i]);
......在这种情况下工作。
JML