0

有人可以帮我找出为什么我在以下截图中收到错误消息“访问未定义的属性:removeChild(goBack)”吗?

顺便说一句,这是用于 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);

}
4

2 回答 2

1

你的范围错了。(惊喜:-D)

变量 goBack 只是在“nameOfFunction”中定义的,当您尝试从另一个函数(如“anotherFunction”)访问它时,它将不再存在(即使它在显示列表中)

解决这个问题有不同的可能性:

function anotherFunction(e:MouseEvent):void {
   removeChild(e.currentTarget);
}

或者最好的方法是:将 goBack 提升为拥有这两个功能的类的类成员。(或者,如果您不使用类,则将 goBack 设为“全局”。)

于 2009-02-26T15:45:34.697 回答
1

河马是正确的,但我觉得多解释一点很重要。

您创建了一个局部变量,即 var someVariable:DataType; 一个函数内。这意味着该变量仅可用于函数(本地)范围(内部)中的对象,并且仅在函数的生命周期内持续存在。一旦该函数运行,代码就消失了,直到再次运行。看起来您很可能直接在时间线上的 flash IDE 中进行编程,这很好,但是,如果您使用的是文档类,您只需在构造函数上方的 Class 范围内声明您的变量,然后在您现在使用的相同函数中设置值。这样,对变量的引用不存在于函数中,它只是从内部设置。这将允许从同一类中的任何位置访问该变量,即使设置为私有。

这可能会有所帮助:

//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 编程,我相信只有显示对象和音频有任何存在。

于 2009-03-04T00:58:31.860 回答