非常奇怪的问题,我是AS的新手,但我不得不说很难理解AS是一种现代语言:
private function completed():void
{
trace("completed.");
var player:Object = (loader.content as SystemManager).application as Object;
player.playVideo();
player.setSize(200,300);
}
SWFLoader id="loader" horizontalCenter="0" width="100%" height="362" source="http://localhost:8000/testflv1.swf" init="completed()"
我想要做的是在另一个父swf中嵌入一个swf,并从父级到嵌入式swf调用一个函数。然后,我使用SWFLoader的init事件来调用该方法。在此之前,我已经验证了在按钮单击处理程序中使用相同的代码,可以使用:
var player:Object = (loader.content as SystemManager).application as Object;
但是如果在init事件处理程序中,(loader.content as SystemManager).application是null。
然而,在SWFLoader的文件中:
init
Dispatched when the properties and methods of a loaded SWF file are accessible.
答案 0 :(得分:1)
我认为问题出在这里是因为包含文件的应用程序属性尚未初始化。 您可以收听APPLICATION_COMPLETE事件,该事件将告诉您何时完成SWF内容的应用程序属性。
public var loadedSM:SystemManager;
private function init():void
{
trace("init.");
loadedSM = SystemManager(loader.content);
loadedSM.addEventListener(FlexEvent.APPLICATION_COMPLETE, callFunc);
}
private function callFunc(event:FlexEvent):void
{
LoadFileInclude(loadedSM.application).playVideo();
}
]]>
</mx:Script>
<mx:SWFLoader id="loader" horizontalCenter="0" width="100%" height="362" source="LoadFileInclude.swf" creationComplete="init()" />
答案 1 :(得分:0)
我有同样的问题。谷歌永远地搜索,最后找到了一个答案,让我找到了埋藏在Old Nabble thread中的解决方案。
基本上,当注入SWF时,MovieClip本身就处于不同的位置,将它解决是一种痛苦。我做了什么:
MXML:
<mx:SWFLoader id="loader" source="@Embed(source='/flash/preloader.swf')" />AS:
var mc:MovieClip = Loader(DisplayObjectContainer(swf.content).getChildAt(0)).content as MovieClip; if(mc) { mc.callAFunction(); }