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