繁体   English   中英

Actionscript 3 movieclip到主时间轴的关系

[英]Actionscript 3 movieclip to main timeline relationship

这是关于编写代码而不是特定问题的问题(尽管这是一个特殊问题)。 请注意,我是自学成才,所以我不知道这是一个非常简单的问题:

我有一个影片剪辑,我已经创建了一个类。 在我的主时间轴上,我使用该函数中的变量在函数内实例化(addChild),例如:

function myfunction():void {
     var newInstance:MovieClip = new myCreatedClassForTheMovieClip();
     addChild(newInstance);
      ....
}

在我的影片剪辑中,我在主时间轴上引用一个变量: movieClipVar = MovieClip(root).mainTimeLineVariable; 我得到错误错误#1009:无法访问空对象引用的属性或方法。

当我在函数之外但在全局级别为影片剪辑的新实例创建变量声明时,我没有得到该错误但是当我尝试removeChild(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;
    }

}

最好使用parent关键字,因为这两个项之间的关系是父/子的关系。 虽然在你的情况下,root和parent应该是同一个东西。

movieClipVar = MovieClip(parent).mainTimeLineVariable;

此外,对于rootparent ,在将对象添加到阶段之后(在将addChild(object)添加到addChild(object) ,不会填充这些变量。

在你调用上面的行之前,你应该添加: trace(parent,root); 并在输出窗口中看到任一个为null。 如果是这样,那么问题是在将项添加到阶段之前调用代码行。

要解决这个问题,你基本上想要在子movieClip的第一帧中执行此操作:(至少在第2帧之前不要做任何其他事情)

if(!parent){
    this.addEventListener(Event.ADDED_TO_STAGE,addedToStage);
    stop();
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM