Flash AS3与外部swf播放/通信

Flash AS3与外部swf播放/通信,flash,actionscript-3,Flash,Actionscript 3,好的,我带来了一个测试外部swf,如下所示: var loader:Loader = new Loader(); var url:URLRequest = new URLRequest("load2.swf"); loader.load(url); addChild(loader); 现在我试着去做一个后继动作,像这样玩: var loaded:Object; loader.c

好的,我带来了一个测试外部swf,如下所示:

var loader:Loader = new Loader();                     
var url:URLRequest = new URLRequest("load2.swf"); 
loader.load(url);                                    
addChild(loader);
现在我试着去做一个后继动作,像这样玩:

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帧。@第1帧有一个“介绍”标签,@5帧有一个“停止”动作,第6帧有一个“输出”标签

问题是,当我单击按钮时,它会重新加载外部swf并从第1帧开始播放

任何想法/提示/提示等我都非常感谢。
提前感谢。

尝试将
加载的
作为电影剪辑:

MovieClip(loaded).gotoAndPlay("outro");
好的,所以这并没有解决它…

如果看不到更多的应用程序,很难说更多,因为提供的代码本身就可以很好地工作。如果这段代码在时间线上,那么在加载操作旁边放一条跟踪线,看看父playhead是否正在重播,这可能是值得的

A ha

我相信我已经解决了。问题来自load2.swf中存在TLF文本。我通过创建自己的load2版本(没有任何TLF文本)证明了这一点,这在您的eerase.fla上运行良好。当我在load2中添加一个TLF文本字段时,它开始显示您正在经历的行为。因此,修复方法就是在任何加载的SWF中不使用TLF文本字段。我使用经典文本字段进行了测试,没有问题


出现这种情况的原因是,TLF文本字段需要加载数据,因此它会创建一个加载到内容中的人工预加载程序。当您发出gotoAndPlay操作时,实际上您是在与这个预加载程序交谈,而不是与您创建的时间线交谈,结果是预加载程序“加载”了您内容的另一个副本。这不是一个实际的HTTP请求,因为内容都在load2.swf中,因此Firebug的网络面板中没有显示任何内容。通过反编译一个SWF,您可以更清楚地看到正在创建什么

尝试侦听Event.INIT而不是Event.COMPLETE

引用LoaderInfo的文档:

完成:成功加载数据时发送

init:当加载的SWF文件的属性和方法 可接近并随时可用


编辑:我现在明白了,加载时不直接调用gotoAndPlay,而是稍后调用。无论如何,我会把答案留在这里。

我相信您只是在handleClick函数中的if语句中检查了错误的函数。您应该测试if(手动加载)而不是if(加载)

我会改进它

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。谢谢

你好,Shannetheat。我试着做同样的事情。它加载但重新导入swf并从1开始播放。我只使用您在这里提供的代码构建了一个测试,它播放时不会出现问题,所以我认为肯定还有其他问题。什么是
load1
?再次您好,感谢您抽出时间。上面代码中的内容,正是我的swf上的内容。这个测试swf实际上什么都没有。一个单帧父swf和要导入的swf(load2.swf)。事实上,问题出在这里,我上传了,你可以看到。我很难调查那个SWF。你能描述一下什么是
load1
吗?load1是舞台上的一个按钮。或者说它的实例名,这只是检查函数是否已定义
if(loaded)
检查加载的变量是否有赋值,换句话说,加载已经完成。是的,我同意,但是,嘿,我什么都没有得到,所以我无论如何都尝试了lol,但它不起作用。不管怎样,我都试过了,但上面的错误是:“警告:3553:在需要布尔类型的地方使用了函数值。这个函数引用后可能缺少括号()。”我开始放弃lol。我想我的下一个问题是,你们会怎么写?我不介意重做一次,因为这根本不起作用。
function handleClick(e:MouseEvent):void
{
    if (handleLoaded(e))
    {
        loaded.gotoAndPlay("outro");
    }

    //load new swf
}