有人可以帮我找出为什么我收到错误消息“访问未定义的属性:removeChild(goBack)”下面的剪辑?
BTW,这适用于Flash CS4
function nameOfFunction() {
var goBack:backButton_mc = new backButton_mc();
goBack.x = 10;
goBack.y = 700;
goBack.back_text.text = myXML.*[buildingName].NAME;
goBack.name = "backBtn";
goBack.buttonMode = true;
addChild(goBack);
goBack.addEventListener(MouseEvent.CLICK, anotherFunction);
}
function anotherFunction(e:MouseEvent):void {
removeChild(goBack);
}
答案 0 :(得分:1)
你的范围错了。 (惊喜:-D)
变量goBack刚刚在“nameOfFunction”中定义,当你尝试从另一个函数(如“anotherFunction”)访问它时,它将不再存在(即使它在显示列表中)
解决这个问题有不同的可能性:
function anotherFunction(e:MouseEvent):void {
removeChild(e.currentTarget);
}
或者最好的方法是:将goBack提升为拥有这两个函数的类的类成员。 (或者,如果你不使用类,请goBack“global”。)
答案 1 :(得分:1)
河马是正确的,但我觉得解释一点是很重要的。
您创建了一个局部变量,即var someVariable:DataType;在一个函数内。这意味着该变量仅可用于函数范围(内部)中的对象(local to),并且只能持续函数的生命周期。很快,当该功能运行时,代码就会消失,直到再次运行。看起来你很可能在时间线上直接在flash IDE中编程,这很好,但是,如果你使用的是文档类,你只能在构造函数上方的Class范围中声明变量,然后将值设置为您现在使用的相同功能。这样,函数内不存在对变量的引用,它只是从内部设置。这将允许从同一类中的任何位置访问该变量,即使设置为private。
这可能有所帮助:
//Frame 1, Actions layer
//Slap goBack right onto the root / stage
var goBack:MovieClip;
/*
I noticed you had this data-typed differently,
i prefer to type to an interface, not an implementation.
Since your class is a movieclip in the library it extends
MovieClip and therefor IS A MovieClip, but ok either way.
*/
function nameOfFunction():void
{
goBack = new backButton_mc();
goBack.x = 10;
goBack.y = 700;
goBack.back_text.text = myXML.*[buildingName].NAME;
goBack.name = "backBtn";
goBack.buttonMode = true;
addChild(goBack);
goBack.addEventListener(MouseEvent.CLICK, anotherFunction);
}
function anotherFunction(e:MouseEvent):void
{
removeChild(goBack);
}
范围非常重要,过了一段时间很容易解决。坚持下去,实验,阅读有助于你的发展的公约和标准,并开始喜欢DocumentClass,尽管一开始可能会让一些人感到畏惧,一旦你学会了它并习惯它,就很难去回到时间轴上的flash IDE中的编程,我相信只有显示对象和音频才有。