Actionscript 3 Actionscript 3电影剪辑与主时间线的关系

Actionscript 3 Actionscript 3电影剪辑与主时间线的关系,actionscript-3,flash,Actionscript 3,Flash,这更多的是关于编写代码的问题,而不是一个特定的问题(尽管它是一个特定的问题)。注意,我是自学成才的,所以如果这是一个非常简单的问题,我有很多不知道的地方: 我有一个电影剪辑,我为它创建了一个类。在我的主时间轴上,我已经在一个函数中使用该函数中的变量对其进行了重新设置(addChild),例如: function myfunction():void { var newInstance:MovieClip = new myCreatedClassForTheMovieClip();

这更多的是关于编写代码的问题,而不是一个特定的问题(尽管它是一个特定的问题)。注意,我是自学成才的,所以如果这是一个非常简单的问题,我有很多不知道的地方:

我有一个电影剪辑,我为它创建了一个类。在我的主时间轴上,我已经在一个函数中使用该函数中的变量对其进行了重新设置(addChild),例如:

function myfunction():void {
     var newInstance:MovieClip = new myCreatedClassForTheMovieClip();
     addChild(newInstance);
      ....
}
在我的电影剪辑中,我引用了主时间线上的一个变量:
movieClipVar=MovieClip(root).mainTimeLineVariableI get error#1009:无法访问空对象引用的属性或方法

当我在函数外部但在全局级别为电影剪辑的新实例声明变量时,我没有得到该错误,但是,当我尝试删除child(newInstance)时,我得到编译器错误1120:访问未定义的属性newInstance(这是有意义的,因为它尚未实例化)

因此,我不确定这两个对象是如何一起工作的(实例化的电影剪辑和主时间轴),以及为什么电影剪辑即使使用MovieClip(root)将其指向那里也无法看到时间轴上的变量

谢谢你在这方面的帮助和指导

干杯

迈克 编辑:当我全局声明
newInstance
时,我在函数中以相同的方式实例化它,只需省略var语句并使用
addChild(newInstance)

以下是删除电影剪辑的功能:

function postResponseCleanUp(): void {
    switch (lessonStep) {
        case 1 :
            break;
        case 2 :
            break;
        case 3 : 
            break;
        case 4 :

            //removeChild(screenPrint); <<previous way
            removeChild(getChildByName("screenPrintName")); // cludgy way
            removeChild(getChildByName("idaWkSheetName"));
            if (userRole == 1) { // witness
                faderOverlay.visible = false;
                instructionsCallout.callout_ta.htmlText ="<font size ='6'>The <font color='#0000FF'>Reconciler</font> continues processing the notes, repeating this process <i>for each deonmination</i>.<br><br>Click <b>Next</b> to see the next steps in the process.</font>";

            } else {
                instructionsCallout.callout_ta.htmlText ="<font size ='6'>You continue processing the notes, repeating this process <i>for each deonmination</i>.<br><br>Click <b>Next</b> to see the next steps in the process.</font>";
                }
            removeChild(pointerNew);
            idaWkSheet.removeEventListener(MouseEvent.ROLL_OVER,boardOver);
            //screenPrint.removeEventListener(MouseEvent.ROLL_OVER,boardOver);
            Mouse.show();
            break;
        case 5 : 
            break;
    }

}
函数postResponseCleanUp():void{
开关(lessonStep){
案例1:
打破
案例2:
打破
案例3:
打破
案例4:

//removeChild(屏幕打印);最好使用
parent
关键字,因为这两个项目之间的关系是parent/child的关系。不过在您的情况下,root和parent应该是相同的

movieClipVar = MovieClip(parent).mainTimeLineVariable;
此外,使用
根目录
父目录
,在将对象添加到阶段之前(在将
添加子目录(对象)
添加到对象之后),不会填充这些变量

在调用上面的行之前,您应该添加:
trace(parent,root);
并在输出窗口中查看其中一个为null。如果是,则问题是在将项添加到stage之前调用代码行

为了解决这个问题,您基本上希望在子电影的第一帧中执行此操作:(并且在至少第2帧之前不要执行任何其他操作)


演示如何定义/实例化
mainTimeLineVariable
varHi!感谢您的回答。我尝试过(但没有提到)我尝试过“parent”“parent.parent”,我的理解是,正如您所说,在这种情况下,根和父应该是相同的。我最终做的是另一种方式(我不是程序员,所以这可能会影响您的阅读)但我声明了'codemovieClipVar.name=“movieClipVarName”和主时间轴函数removeChild(getChildByName(“movieClipVarName”);如果您更新了问题以包含完整代码(在删除孩子的地方),我可以向您展示正确的方法。
if(!parent){
    this.addEventListener(Event.ADDED_TO_STAGE,addedToStage);
    stop();
}

function addedToStage(e:Event){
    this.removeEventListener(Event.ADDED_TO_STAGE,addedToStage);
    play();
}