Actionscript 3 影片剪辑与主时间线的关系
Posted
技术标签:
【中文标题】Actionscript 3 影片剪辑与主时间线的关系【英文标题】:Actionscript 3 movieclip to main timeline relationship 【发布时间】:2013-06-21 05:59:16 【问题描述】:这更像是一个关于编写代码的问题,而不是一个特定的问题(尽管它是一个特定的问题)。请注意,我是自学的,所以如果这是一个非常简单的问题,我不知道很多:
我有一个影片剪辑,我为它创建了一个类。在我的主要时间线上,我使用该函数中的变量在函数中将其实例化(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;
【问题讨论】:
展示你如何定义/实例化mainTimeLineVariable
var
【参考方案1】:
最好使用parent
关键字,因为这两个项目之间的关系是父/子关系。尽管在您的情况下 root 和 parent 应该是同一件事。
movieClipVar = MovieClip(parent).mainTimeLineVariable;
另外,对于root
和parent
,这些变量在对象添加到舞台之前不会被填充(在您对对象执行addChild(object)
之后)。
在您调用上面的行之前,您应该添加:trace(parent,root);
并在输出窗口中查看其中一个是否为空。如果是这样,那么问题是在将项目添加到阶段之前调用了这行代码。
要解决这个问题,您基本上希望在子影片剪辑的第一帧中执行此操作:(至少在第 2 帧之前不要执行任何其他操作)
if(!parent)
this.addEventListener(Event.ADDED_TO_STAGE,addedToStage);
stop();
function addedToStage(e:Event)
this.removeEventListener(Event.ADDED_TO_STAGE,addedToStage);
play();
【讨论】:
嗨!感谢您的答复。我试过(但没有提到)我试过“parent”“parent.parent”,我的理解如你所说,在这种情况下,root 和 parent 应该是相同的。我最终做的是另一种方式(我不是程序员,所以这可能会伤害你阅读)但我声明了'codemovieClipVar.name =“movieClipVarName”并在主时间线函数removeChild(getChildByName(“movieClipVarName” "));就这样 如果您更新您的问题以包含完整代码(您要删除孩子的位置),我可以向您展示正确的方法。以上是关于Actionscript 3 影片剪辑与主时间线的关系的主要内容,如果未能解决你的问题,请参考以下文章
无法将其他 Flash 影片剪辑访问到 Actionscript 3