这是关于编写代码而不是特定问题的问题(尽管这是一个特殊问题)。请注意,我是自学成才,所以我不知道这是一个非常简单的问题:
我有一个影片剪辑,我已经创建了一个类。在我的主时间轴上,我使用该函数中的变量在函数内实例化(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;
}
}
答案 0 :(得分:1)
最好使用parent
关键字,因为这两个项目之间的关系是父/子的关系。虽然在你的情况下,root和parent应该是同一个东西。
movieClipVar = MovieClip(parent).mainTimeLineVariable;
此外,对于root
和parent
,在将对象添加到舞台之后(在对对象执行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();
}