我在这里是个莫名其妙的笨蛋。我有以下代码:
var mC:mc = new mc();我做的是,而不是实例化mC,使用addChild(mC);
但是,在后面的代码中,我有一个使用onEnterFrame的循环,在这个循环中我有以下跟踪函数:
if(mC){
trace("mC is here");
}这将在输出窗口中返回"mC在这里“。嗯?
问题是,我想要使用这个'if‘语句到removeChild(mC);我将在代码中添加它,稍后使用addChild(mC);基于发生的某些事情,但它总是抛出“调用者的错误子”消息,即使在'if’条件下.
我做错了什么?我不知道声明变量会将它们添加到工作台/显示列表中,我认为您需要一个addChild();语句。我是不是抽了不该抽的东西?
提前感谢,~沮丧公司。
发布于 2015-12-11 23:42:13
当您新建一个对象时,它存在于内存中,即使您还没有将它添加到舞台上。这就是为什么当您检查mC是否存在时,它会返回true。你想看看它是否存在于舞台上。类似于:
var mc:MovieClip = new MovieClip();
mc.name = "test";
if (this.getChildByName("test") != null) {
trace("mc is on stage");
}我很久没有使用Flash了,所以我没有测试这段代码。希望它能成功。
发布于 2015-12-12 01:57:35
在代码中,只需控制变量是否为空。
您可以在要添加的显示对象上使用contains方法。
如果要将mC添加到某个名为sprite的容器中,则可以简单地检查它是否存在于该容器中:
if (!container.contains(mC))
container.addChild(mC);编辑:控制一个电影是否在舞台上的更安全的方法是控制它的舞台值。
if (mC.stage) {
mC.parent.removeChild(mC); // this is how you remove, if you simply want to check existence, don't remove it
}如果将电影添加到舞台或添加到舞台的容器,则必须具有舞台价值。
希望这样更清楚。
发布于 2015-12-12 04:01:58
AS3中的复杂对象(这意味着任何非字符串或数字)的默认值为null。WHen计算出默认值null等于false:
var mymc:MovieClip;//that MC is NOT instantiated yet so it has a default value of null
if(mymc)
{
//mymc is null so this evaluates to false
//and this statement DOES NOT execute现在,当一个复杂对象被实例化并存在时,它的值现在将计算为true。
var mymc:MovieClip = new MovieClip();//that MC IS instantiated
if(mymc)
{
//mymc exits so this evaluates to true and this statement EXECUTE
//notice that "!= null" is not necessary现在,您的问题与显示列表有关。当没有将对象添加到显示列表时,DisplayObject具有一个为null的父属性,当该对象被添加到显示列表时,该属性指向父属性:
var mc:MovieClip = new MovieClip()
trace(mc.parent);//this is null
addChild(mc);
trace(mc.parent);//this is not null anymore and points to the parent所以你的意思是:
if(mC.parent){//this means mC has a parent and can be removed from it
trace("mC is here");
}https://stackoverflow.com/questions/34234261
复制相似问题