AS3运行时加载外部库,调用swf中的库

使用Flash Builder创建ActionScript项目,最苦恼的事情莫过于没有素材了。如果能通过运行时加载的方式提供素材,那么开发起项目来就事半功倍了!下面介绍的,正是这种运行时加载素材的方式。

【例1】
最近在网上看到一篇关于ApplicationDomain类的文章,有兴趣的朋友不防也去看看,
网址:http://eidiot.net/
参考:http://oliwen.blog.163.com/blog/static/38057532200772891112440/

浅显的研究了一下,发现用这个类竟可以调用加载进来的SWF库文件,嘿嘿,以后做大型的网络开发,这个功能可就能派上大用场了.现将代码公视如下:

var loader : Loader = new Loader();
var context : LoaderContext = new LoaderContext(true, ApplicationDomain.currentDomain);
/* 加载到同域(共享库) */
context.applicationDomain = ApplicationDomain.currentDomain;
//context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
这是我写在针上做的一个测试,m2为加载进来的SWF,Tm为m2库中的链接类名.
loader.load(new URLRequest("m2.swf"), context);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadcom);
function loadcom(the:Event):void
{
var runtimeClassRef:Class = getClass("Tm");
var greeter:MovieClip = new runtimeClassRef();
addChild(greeter);
greeter.x=100;
greeter.y=200;

function getClass(className:String):Class
{
   return loader.contentLoaderInfo.applicationDomain.getDefinition(className) as Class;
}
}


 

【例2】
---------------------LittleSpace 扩展修改------------------------------
SkinOverAllNoCaption.swf 为FLVPlayBack 组件的一个皮肤~
我这里只调用一个舞台上的按钮【"playpause_mc"】,播放暂停按钮,
此按钮的链接名为:fl.video.skin.PlayButtonNormal

舞台第一帧书写 : this.playButtonNormalState = "fl.video.skin.PlayButtonNormal";
Ctrl+Enter发布SkinOverAllNoCaption.swf

然后新建一个fla,在第一帧写入:
var request:URLRequest = new URLRequest("SkinOverAllNoCaption.swf");
var loader:Loader = new Loader();
var skinTemplate;//注意这里不能定义类型,否则出错[访问未定义的属性]
loader.contentLoaderInfo.addEventListener (Event.COMPLETE, loadComplete);
loader.load (request);
function loadComplete (event:Event):void
{
skinTemplate = Sprite(loader.content);
trace (skinTemplate );
addChild (skinTemplate );
trace (skinTemplate.pauseButtonOverState);
trace (skinTemplate.playpause_mc);
//与加载swf交互
skinTemplate.playpause_mc.addEventListener (MouseEvent.CLICK,clickHandler);
}
function clickHandler (e)
{
//获得加载的swf中的库的定义
var runtimeClassRef:Class = getClass(skinTemplate.playButtonNormalState);
//或者使用这句
// var runtimeClassRef:Class = getClass("fl.video.skin.PlayButtonNormal");
trace (runtimeClassRef is Class);
var greeter:MovieClip = new runtimeClassRef();
addChild (greeter);
}
function getClass (className:String):Class
{
return loader.contentLoaderInfo.applicationDomain.getDefinition(className) as Class;
}

来源:http://hi.baidu.com/8090boy/blog/item/47678ea71d46d398d14358a2.html

asfunction在as3中的代替品

as3中不再使用asfunction来实现文本和ActionScript的交互。

as3中使用“事件”模式来实现原来的asfunction功能。具体做法:

1、在href属性中添加Event:href="event:event字符串"

2、侦听文本域(TextField):TextField.addEventListener(TextEvent.LINK,linkHandler)

3、处理事件:function linkHandler(e:TextEvent):void{}

ActionScript源码: 

var myHTMLText:String = "Sample text in an html enabled text box.\n"+
"Here's a normal link to <a href='http://bloc.circlecube.com'>circlecube</a> putting the link into the href attribute like normal!\n"+
"<a href='event:clickLink'>Click this circlecube</a>, to see the text event link in action! \n"+
"And some more links that don't go anywhere, but they do call functions in actionscript. "+
"Click this to move <a href='event:moveUp'>UP</a>, click me move back "+
"<a href='event:moveDown'>DOWN</a>.\n"+
"Also, one last example <a href='event:testing'>click for a trace test</a>";

//create and initialize css
var myCSS:StyleSheet = new StyleSheet();
myCSS.setStyle("a:link", {color:'#0000CC',textDecoration:'none'});
myCSS.setStyle("a:hover", {color:'#0000FF',textDecoration:'underline'});
myHTML.styleSheet = myCSS;
myHTML.htmlText = myHTMLText;

myHTML.addEventListener(TextEvent.LINK, linkHandler);

function linkHandler(linkEvent:TextEvent):void {
    switch (linkEvent.text) {
        case "clickLink":
            clickLink();
            break;
        case "moveUp":
            moveUp();
            break;
        case "moveDown":
            moveDown();
            break;
        default:
            giveFeedback(linkEvent.text);
    }   
}
//function to be called from html text
function clickLink():void {
    giveFeedback("Hyperlink clicked!");
    var myURL:String = "http://blog.circlecube.com";
    var myRequest:URLRequest = new URLRequest(myURL);
    try {            
        navigateToURL(myRequest);
    }
    catch (e:Error) {
        // handle error here
        giveFeedback(e);
    }
}

//another function to be called from html text, recieves one argument
function moveUp():void {
    feedback.y -= 10;
    giveFeedback("Up");
}

//a simple trick to allow passing of multiple arguments
function moveDown():void {
    feedback.y += 10;
    giveFeedback("Down");
}

function giveFeedback(str):void {
    trace(str);
    feedback.appendText(str +"\n");
    feedback.scrollV = feedback.maxScrollV;
}

 下载实例文件For Flash CS4:http://blog.circlecube.com/wp-content/uploads/2008/12/textlinkevent_as3.fla

英文版:http://blog.circlecube.com/2008/12/tutorial/asfunction-texteventlink-tutorial-for-as3-flash-html-link-to-call-actionscript-function-tutorial/

公告栏

  • 姓名:林剑锋(不见不散)
  • 来自:中国-广州
  • 简介:技术的信徒。
  • Email/QQ:admin@ljf.cn
  • 点击这里给我发消息

QQ群:设计学院 68075618,网站设计师 9908776

统计

文章:337篇
评论:173条 (2条Spam)
相册:1个 (121张图片)
主题:Nagrand新主题

www.ljf.cn网站PR查询