我在这个网站上看过类似的问题而无法找到解决方案,所以这是我的问题:
我有一个保存功能,可以保存一些数据。此功能位于另一个影片剪辑中的1个影片剪辑中。保存后我想要主时间线的gotoAndStop(1)而不是当前嵌套的...可以有人帮忙吗?
以下是代码:
function save()
{
var oldname:String = so.data.username;
so.data.username = oldname + tf.text + " " + nf.text + "\n";
tf.text = "";
nf.text = ""; // resets textfields
so.flush(); // writes changes to disk
trace("Saved");
gotoAndStop(1); <<----this must goto frame 1 of the main time line??
}
这是AS3。在AS2中,我曾经能够调用_root。或_parent。这将工作正常,但现在它抛出编译器错误。 Stage.gotoAndStop(1);也不起作用......
感谢任何帮助, 提前致谢 Luben
答案 0 :(得分:5)
您可以使用root
访问最顶层的DisplayObject
。由于DisplayObject
没有gotoAndStop()
方法,因此尝试root.gotoAndStop()
会导致:
1061:通过静态类型flash.display:DisplayObject的引用调用可能未定义的方法gotoAndStop。
然而,您可以typecast root
到MovieClip
1 ,这将授予对它的访问权限:
MovieClip(root).gotoAndStop(1); // or:
(root as MovieClip).gotoAndStop(1);
对MovieClip
进行类型转换还允许您访问主时间轴上的用户定义属性和函数 - 这是因为MovieClip是dynamic
,它会删除您所使用的属性和方法的编译时限制允许访问对象。
1 除非您的文档类继承Sprite
而非MovieClip
。
答案 1 :(得分:1)
我没有在Flash时间线上做很多编码(我建议你开始考虑使用文档根目录中的外部类定义,如果你的应用程序甚至是中等复杂度的话);但以下建议应该仍然适用。
在AS3中,在显示列表上调度的事件可以将其bubbles
属性设置为true,这将启用事件冒泡。通过启用事件冒泡,您可以在显示列表中监听更高的位置,the following article可以通过您可以使用的演示来解释它。
在您的应用程序中,我们假设您有两个“块”操作,save
函数定义和main
函数定义:
主要
// Add an event listener, when we hear a 'SaveEvent' we will call
// the onSaveEvent function.
addEventListener("SaveEvent", onSaveEvent);
// This function is called when we hear a 'SaveEvent'.
function onSaveEvent(event : Event) : void {
trace("Main heard event: " + event.type);
// We can now instruct our Main Timeline.
gotoAndStop(1);
}
保存
// Perform your save operation as before...
so.flush(); // writes changes to disk
trace("Saved");
// Now dispatch an Event, make sure we set it to bubble.
var bubbles : Boolean = true;
dispatchEvent(new Event("SaveEvent", bubbles));
答案 2 :(得分:0)
//因此,您可以转到场景1的第一帧
MovieClip(root).gotoAndStop(1, "Scene 1");