2018新老藏宝图图片 567812彩·霸王中特网 坐着的生肖 今晚特马生肖图112期什么好 今天开的什么特马结果 生肖开什么特马网址 最准特马资料 今天生肖开奖结果查询 2018正版生肖排码表图 今晚买什么生肖是特马 开码结果2018今晚 2018波色表高清图片图 曾道免费资料2018大全 2018独一无二的微信名 曾道免费资料2018大全

As3.0 xml + Loader

作者: Mirage

性质: 原创

阅读次数: 20979

发表时间: 2007-12-13 14:25:12


一个适合菜鸟级的教程--------------------------Mirage
http://www.byfxm.live/forum/showthread.php?t=2502

      上面的地址是曾经也就是刚刚过去的一个月前学习AS2.0的时候有感而发写的乌七八糟,而这些日子开始着手3.0了咬牙切齿的要自己?#19968;?#22312; 2.0上所会的,于是乎冒出个这么东东,其实这两个东东表现的效果是一样的,只是编写的脚本不一样了。我很欣慰。。。。总算是?#19968;?#26469;了点。


     好了现在说一下它的内容吧,其实很简单是两部分组成的,只是两个MC,rejigger_mc和loadPic_mc,前者是负责加载XML以及如何显示图片的整个SWF的主干,而后者只是为?#24605;?#36733;图片显示进度的一个小零件。

    以前2.0时,我把代码分别写在rejigger_mc和loadPic_mc的时间轴上,然后在rejigger_mc里黏贴N多个 loadPic_mc,可现在不?#27427;玻?#20182;们不让我那么做,我只?#20882;?#20195;码写在两个rejigger_mc.as和loadPic_mc.as外部文件里。
    注:这些文件的布局如下,文件夹ActionScript里含rejigger_mc.as和loadPic_mc.as

/media/upload/2007/12/13/as3_xml_loader/1.jpg

我以混?#19994;?#24605;维浅薄的学识来聊聊我写的东西。。。。首先是loadPic_mc.as文件

package ActionScript{//包是什么,?#19994;?#29702;解它就是文件夹,不就是为了完全限定名称吗
    import flash.net.URLRequest;
    import flash.display.Loader;
    import flash.events.*;
    import flash.display.MovieClip;
    import flash.text.TextField;
    import fl.transitions.Tween;
    import fl.transitions.easing.Back;
    import fl.transitions.TweenEvent;
//变了啊,真的变了,现在用什么东西都得冲?#24605;?#24352;口借,尽管是免费的,我曾经偷//偷地在所关联的MC里放了一个文本框,结果还是被发现了,你说我和FLASH打//了多少年的交道,多多少少有点感情吧??,最后我不得不import flash.text.TextField;

    public class loadPic_mc extends MovieClip {
        //类名原来就是脚本文件名
        public var fun:Function;
        //定义了一个属性他的再次出现在最后一行
        private var per_txt:TextField;
        //显示加载进度
        private var loadPic:Loader;
        private var dispatcher:IEventDispatcher;
        //上面的这些变量曾经我是声明在主时间轴的最顶端的
        public function loadPic_mc(str:String):void {//构造函数,现在完全多了个这个东东,据我观察,当你声明一个类时,不管你愿不愿意它都会执行这个函数
            var request:URLRequest=new URLRequest(str);
            loadPic=new Loader();

            dispatcher=loadPic.contentLoaderInfo;
            dispatcher.addEventListener(Event.COMPLETE,loadComH);
            dispatcher.addEventListener(Event.OPEN,loadOpenH);
            dispatcher.addEventListener(ProgressEvent.PROGRESS,loadProgH);
            //订阅事件呢
            loadPic.load(request);
            //一个载入多写?#24605;感校?#35201;是从3.0转?#20599;?.0那该多快
            

            per_txt=new TextField();
            per_txt.x=10;
            per_txt.y=55;
            per_txt.width=150;
            per_txt.textColor=0xB3CCCC;
            this.motionLoad_mc.visible=false;
//在loadPic_mc的舞台上所含的一个MC,有时间轴的
            this.addChild(loadPic);
            //曾经用this指东指西的,现在呢,不能再乱指了,只能指本类,
            this.addChild(per_txt);
        }
        private function loadOpenH(event:Event):void {
            this.motionLoad_mc.visible=true;
            per_txt.text="正在载入。。。。";
            loadPic.alpha=0;
            //开始下载时调度
        }
        private function loadProgH(event:ProgressEvent):void {
            per_txt.text="已载入。。。。"+uint(event.bytesLoaded/event.bytesTotal*100)+"%";
            //下载过程中调度

        }
        private function loadComH(event:Event):void {
            var aTween:Tween = new Tween( loadPic, "alpha", Back.easeOut,0, 1, 2, true);
             aTween.addEventListener(TweenEvent.MOTION_FINISH,disPic);
            //其实完全没必要订阅这个事件,只是想联系一下Tween类
            this.removeChild(this.motionLoad_mc);
            this.removeChild(per_txt);
            //显示对象很帅吧以后就再也不要_mc[newmc+”I”]去找对象了

            dispatcher.removeEventListener(Event.COMPLETE,loadComH);
            dispatcher.removeEventListener(Event.OPEN,loadOpenH);
            dispatcher.removeEventListener(ProgressEvent.PROGRESS,loadProgH);
            //清除监听,便于处理垃圾
        }
        private function disPic(event:TweenEvent){
            fun();
            //调用函数fun
        }
    }
}
//写完此类了  其实3.0语言一看很有层次感的,8错8错

下面在库里?#19994;絣oadPic_mc  右键 –链接 类里填入:ActionScript.loadPic_mc
注: loadPic_mc里只含一个元件motionLoad_mc

接下来编写类rejigger_mc.as

package ActionScript{
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.events.*;

    import flash.display.SimpleButton;
    import flash.display.Sprite;
    import fl.transitions.Tween;
    import fl.transitions.easing.Back;
    import ActionScript.loadPic_mc;

    public class rejigger_mc extends Sprite {
        private var sprite:Sprite;
        private var portraitXml:XML;
        private var loadXml:URLLoader;
        private var dispatcher:IEventDispatcher;
        private var i:uint;
        private var len:uint;
        private var m:uint;
        //这些属性都是私有的从此类外部是无法访问的


        public function rejigger_mc():void {
            var request:URLRequest=new URLRequest("portrait.xml");
            loadXml=new URLLoader(request);
            //载入外部XML文件
            loadXml.addEventListener(Event.COMPLETE,comH);

        }

        private function comH(event:Event) {
            portraitXml=new XML(event.target.data);
            sprite=new Sprite();
            //这个其实就是装loadPic_mc的容器
            sprite.x=10;
            sprite.y=10;
            this.addChild(sprite);
            var maskSprite:Sprite=new Sprite();
            //只是为了遮盖 所以不必添加到显示列表中
            maskSprite.graphics.beginFill(0xffffff);
            maskSprite.graphics.drawRect(10,10,150,80);
            maskSprite.graphics.endFill();
            sprite.mask=maskSprite;

            this.right_btn.addEventListener(MouseEvent.CLICK,moveRight);
            this.left_btn.addEventListener(MouseEvent.CLICK,moveLeft);
            //又该订阅事件了
            i=0;
            len=0;
            for (var item:String in portraitXml.part) {
                len++;
                //不知道怎么取得XML子节点的长度,要是转换为XML文?#36947;?#30340;话觉得很麻烦
            }
            loadPor();

            loadXml.removeEventListener(Event.COMPLETE,comH);
            //卸载监听
        }
        private function loadPor():void {
            if (i<len) {
                var loadPic:loadPic_mc=new loadPic_mc(portraitXml.part{i}[email protected]);//基于发布系统的问题,此处的大括号需要换为中括号.
                loadPic.fun=loadPor;
                sprite.addChild(loadPic);
                //在sprite里添加显示对象loadPic
                loadPic.x=i*150;

                i++;
            } else {
                return;
            }
        }
        private function moveRight(event:MouseEvent) {
            if (m>0) {
                m--;
                var aTween:Tween = new Tween( sprite, "x", Back.easeOut, sprite.x, 10-m*150, 1, true);
                //移动是直?#21491;?#21160;sprite,因为sprite里含N多个loadPic
            } else {
                return;
            }
        }
        private function moveLeft(event:MouseEvent) {
            if (m<len-1) {
                m++;
                var aTween:Tween = new Tween( sprite, "x", Back.easeOut, sprite.x, 10-m*150, 1, true);
            } else {
                return;
            }
        }
    }
} 

在库里?#19994;絩ejigger_mc  右键 –链接 类里填入:ActionScript. rejigger_mc
基类可以写成flash.display.Sprite  因为这个类扩展的是Sprite类
注:rejigger_mc里只含两个元件   都是按钮

最后一步,是在主时间上写上代码如下:

this.stage.frameRate=31;
this.stage.scaleMode=StageScaleMode.NO_SCALE;
this.stage.align=StageAlign.TOP_LEFT;


import ActionScript.rejigger_mc;
var myrejigger:rejigger_mc=new rejigger_mc();
addChild(myrejigger); 

导出去测试好了:)

还不错吧,对比下XML+MovieClipLoader类就知道了,编写3.0首先代码布局上有很层次感,容易阅读,我想这点主要归功于处理事件机制 了,显示对象不在像以前那样混乱,现在更有层次感。其次处理XML比以前要便捷,最后呢,最重要的一点就是编完之后有种酷酷的感觉,代码和界面的分 离。。。。。

可能刚开始有很多的不习惯尽管事实上没有2.0方便吧,但做的东西多了相信你一定会体会更多的优越性,足够弥补它的不便。

?#24944;?#36164;料:
http://www.byfxm.live/tutorial/show.php?id=44
当初还是看了这篇教程着手3.0的,更多的幻想来源于此

 

?#27425;?#20214;下载

讨论教程

服务项目_SERVICE

关于我们

万博思图(北京)信息技术有限公司,专业的flash,flex开发团队,5年经验。公司致力于互联网上的业务的开展,对于互动网站行销,互联网应用程序开发有成熟的解决方案。我们关注互联网市场动态,关注新技术,更注重在新的领域不断探索发现。
万博思图业务内容主要包括企业?#25918;艶lash网站开发,企业形象宣传Flash设计,动画,多?#25945;?#28436;示,Flex企业级应用程序开发,拥有众多成功案例,?#38431;?#26469;电咨询。
 
COPYRIGHT BY WEBSTUDIO INTERACTIVE DESIGN Co.,Ltd. ALL RIGHTS RESERVED.
公司地址: 北京市朝阳区光华路15号院泰达时代中心4号楼704 ?#26102;? 100026 EMAIL: [email protected]
电话: 010-59070059   (新号:010-59897050 010-59897060)  手机: 13693660520 传真: 010-59070059-801
京公网安备:110108006741      京ICP备:05013074号-1
2018年白小姐一肖特马
2018新老藏宝图图片 567812彩·霸王中特网 坐着的生肖 今晚特马生肖图112期什么好 今天开的什么特马结果 生肖开什么特马网址 最准特马资料 今天生肖开奖结果查询 2018正版生肖排码表图 今晚买什么生肖是特马 开码结果2018今晚 2018波色表高清图片图 曾道免费资料2018大全 2018独一无二的微信名 曾道免费资料2018大全
安徽l快3开奖结果查询 甘肃11选5开奖查询 吉林11选5计算奖金 河北11选5玩法和拖号 阅读新闻赚钱单价高app 双色球DNA工具 上海百乐门怎么消费的 老重庆时时开彩结果360 福彩湖北快3投注技巧