AS3-舞台上加载一外部SWF,舞台如何调用该swf内部方法呢?

发布于 2016-12-04 06:36:33 字数 0 浏览 1210 评论 2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瑾兮 2017-07-27 16:11:28

可以使用getDefinitionByName方法,也可以用ApplicationDomain的getDefinition方法,提供获取Class的方法如下:

public function getClass(className:String, domain:ApplicationDomain = null):Class {
if (domain == null) {
domain = ApplicationDomain.currentDomain;
}
if (domain.hasDefinition(className)) {
return domain.getDefinition(className) as Class;
}
return null;
}
var obj:Object = getClass("Called");
obj.method();

清晨说ぺ晚安 2017-04-14 07:20:45

一个Flash中通过AS3代码的Loader对象加载另一个SWF文件,并访问其中的文档类中的方法。
简单示例:

主文件:Main.fla, Main.as

被调用的文件:called.swf, Called.as

package{
import flash.display.Sprite;
import flash.net.URLRequest;
import flash.display.Loader;
import flash.events.Event;
public class Main extends Sprite{
private var loader:Loader;

public function Main(){
loader = new Loader();
loader.load(new URLRequest("called.swf"));
loader.contentLoadInfo.addEventListener(Event.Complete, loadComplete);
}

private function loadComplete(e:Event):void{
var obj:Object = loader.content; // 通过loader.content获取Called类对象,并赋值给Object对象

obj.method(); //调用Called对象的method方法
}
}
}

被调用文件: Called.as

package{
import flash.display.Sprite;
public class Called extends Sprite{
}
public function method():void{
trace("Called对象中的method方法被调用了");
}
}

---------------------输出结果-------------------------

Called对象中的method方法被调用了

值得提出注意的地方是obj.method(); 中的“.method(); ”是不能通过代码编辑器提示显示的。

如果希望能够在代码编辑器中显示,可以在主文件中增加一个接口类,并把加载的loader.content强制转换成该接口类的一个实例。

如var obj:CalledInterface=loader.content as CalledInterface;
其中CalledInterface是在主文件中定义的一个拥有被调SWF文档类的公开方法的接口类。这样就可以在代码编辑器中看到提示的方法了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文