好吧所以我带来了一个测试外部swf,如下所示:
var loader:Loader = new Loader();
var url:URLRequest = new URLRequest("load2.swf");
loader.load(url);
addChild(loader);
现在我试图像这样使用goto和play:
var loaded:Object;
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, handleLoaded);
function handleLoaded(e:Event):void {
loaded = e.target.content;
}
load1.addEventListener(MouseEvent.CLICK, handleClick);
function handleClick(e:MouseEvent):void {
if (loaded) {
loaded.gotoAndPlay("outro");
}
//other content here.
}
这个简单的外部测试swf有10帧。 @ frame 1是一个“intro”标签,@ frame 5是一个“停止”动作,而在第6帧,则是一个“outro”标签。
问题是,当我点击按钮时,它会重新加载外部swf并从第1帧播放。
任何想法/提示/提示等id很高兴欣赏。 提前谢谢。
答案 0 :(得分:1)
尝试将loaded
转换为MovieClip:
MovieClip(loaded).gotoAndPlay("outro");
好的,所以没有解决它......
如果没有看到更多的应用程序,很难说更多,因为提供的代码可以自行运行。如果此代码位于时间轴上,则可能值得在加载操作旁边添加跟踪以查看父播放头是否正在重播。
哈哈
我相信我已经解决了。问题来自load2.swf中TLF文本的存在。我通过创建自己的load2版本来证明这一点,没有任何TLF文本,这对你的eerase.fla工作得很好。当我向我的load2添加TLF文本字段时,它开始显示您正在经历的行为。因此修复只是在任何加载的SWF中不使用TLF文本字段。我使用经典文本字段测试没有问题。
发生这种情况的原因是因为TLF文本字段需要加载数据,因此它会创建一个加载到您的内容中的人工预加载器。当您发出gotoAndPlay操作时,实际上您正在与此预加载器通信,而不是您创建的时间线,结果是预加载器“加载”您内容的另一个副本。这不是一个实际的HTTP请求,因为内容全部在load2.swf中,因此Firebug的Net面板中没有任何内容。您可以通过反编译其中一个SWF来更清楚地看到正在创建的内容。
答案 1 :(得分:1)
尝试侦听Event.INIT而不是Event.COMPLETE。
引用LoaderInfo的文档:
complete:成功加载数据后调度。
init:在加载的SWF文件的属性和方法时调度 随时可以使用。
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/LoaderInfo.html
编辑:我现在看到你不是在加载时直接调用gotoAndPlay,而是稍后。无论如何,我会在这里留下答案。
答案 2 :(得分:0)
我相信你只是在handleClick函数中检查if语句中的错误函数。您应该测试if(handleLoaded)而不是if(loaded)...
//these 4 lines load ext swf
var loader:Loader = new Loader();// create a new instance of the Loader class
var url:URLRequest = new URLRequest("load2.swf");// in this case both SWFs are in the same folder
loader.load(url);
// load the SWF file;
addChild(loader);
//////////
//test below
var loaded:MovieClip;
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, handleLoaded);
function handleLoaded(e:Event):void
{
loaded = e.target.content;
}
load1.addEventListener(MouseEvent.CLICK, handleClick);
function handleClick(e:MouseEvent):void
{
if (handleLoaded)
{
loaded.gotoAndPlay("outro");
}
//load new swf
}
答案 3 :(得分:0)
我改进了
function handleClick(e:MouseEvent):void
{
if (handleLoaded)
{
loaded.gotoAndPlay("outro");
}
//load new swf
}
替换为:
function handleClick(e:MouseEvent):void
{
if (handleLoaded(e))
{
loaded.gotoAndPlay("outro");
}
//load new swf
}
确实可行..我正在测试Flex SDK 3.6a ..但我尚未测试Flash CS3 / CS4 / CS5。感谢