`

请您先登录,才能继续操作

As3.0 xml + Loader

阅读更多

  上面的地址是曾经也就是刚刚过去的一个月前学习AS2.0的时候有感而发写的乌七八糟,而这些日子开始着手3.0了咬牙切齿的要自己找回在2.0上所会的,于是乎冒出个这么东东,其实这两个东东表现的效果是一样的,只是编写的脚本不一样了。我很欣慰。。。。总算是找回来了点
     好了现在说一下它的内容吧,其实很简单是两部分组成的,只是两个MC,rejigger_mc和loadPic_mc,前者是负责加载XML以及如何显示图片的整个SWF的主干,而后者只是为了加载图片显示进度的一个小零件。
    以前2.0时,我把代码分别写在rejigger_mc和loadPic_mc的时间轴上,然后在rejigger_mc里黏贴N多个loadPic_mc,可现在不行啦,他们不让我那么做,我只好把代码写在两个rejigger_mc.as和loadPic_mc.as外部文件里。
    注:这些文件的布局如下,文件夹ActionScript里含rejigger_mc.as和loadPic_mc.as
 

我以混乱的思维浅薄的学识来聊聊我写的东西。。。。首先是loadPic_mc.as文件

代码:
 
package ActionScript{//包是什么,我的理解它就是文件夹,不就是为了完全限定名称吗
    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;
//变了啊,真的变了,现在用什么东西都得冲人家张口借,尽管是免费的,我曾经偷//偷地在所关联的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);
            //一个载入多写了几行,要是从3.0转型到2.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错

下面在库里找到loadPic_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文档类的话觉得很麻烦
            }
            loadPor();

            loadXml.removeEventListener(Event.COMPLETE,comH);
            //卸载监听
        }
        private function loadPor():void {
            if (i<len) {
                var loadPic:loadPic_mc=new loadPic_mc(portraitXml.part{i}.@path);//基于发布系统的问题,此处的大括号需要换为中括号.
                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);
                //移动是直接移动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;
            }
        }
    }
}
 
 


在库里找到rejigger_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方便吧,但做的东西多了相信你一定会体会更多的优越性,足够弥补它的不便。

 

 

分享到:
评论

相关推荐

    AS3.0+XML 相册 (自己写的)

    AS3.0+XML 相册是一种常见的网页动态展示方式,尤其适用于创建具有交互性和可扩展性的图片库。在这个项目中,开发人员使用了ActionScript 3.0(AS3.0),这是一种强大的编程语言,它是Adobe Flash Player和Adobe AIR...

    AS3.0+xml通用图片滚动(含源码)

    AS3.0+xml通用图片滚动是一个使用Adobe ActionScript 3.0编程语言和XML数据格式实现的图片轮播组件。这个组件适用于网页、Flash应用程序或其他需要动态展示多张图片的场景。以下是关于这个主题的详细知识点: 1. **...

    as3.0用xml调用图片相册

    在本文中,我们将深入探讨如何使用AS3.0(ActionScript 3.0)通过XML来创建一个图片相册。ActionScript是Adobe Flash Professional和Flex Builder等开发工具中用于创建交互式内容的主要编程语言,而XML则是一种轻量...

    flash as3.0与XML做的简单幻灯片

    在本文中,我们将深入探讨如何使用Flash AS3.0与XML技术来创建一个简单的幻灯片应用程序。Flash ActionScript 3.0(AS3.0)是Adobe Flash平台上的编程语言,它为开发者提供了强大的功能,可以创建丰富的交互式内容。...

    as3.0通过XML加载外部图片实例

    在AS3.0中,通过XML来加载外部图片是一种常见的技术,这主要涉及到ActionScript 3.0的基础知识,XML的解析以及加载机制,以及图片显示对象的使用。以下是关于这个主题的详细解释: 1. **AS3.0基础知识**: AS3.0是...

    AS3.0简单相册,适合初学者

    AS3.0(ActionScript 3.0)是Adobe Flash平台中的编程语言,它是一种基于ECMAScript的脚本语言,主要用于创建互动式内容、网页动画以及富互联网应用程序(RIA)。这个“AS3.0简单相册”项目是为初学者设计的,旨在...

    FLASH AS3.0 菜单

    7. **外部数据加载**:如果菜单项需要从外部文件动态加载,可以使用`Loader`和`URLLoader`类加载XML或JSON数据。 8. **优化性能**:避免不必要的计算和重复渲染,使用` ENTER_FRAME`事件监听器来控制动画更新,提高...

    AS3.0 加载进度条效果

    Loader类是AS3.0中的核心组件,用于加载各种类型的数据,包括图像、SWF文件和XML。 ```actionscript var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.PROGRESS, onProgress); ...

    As3.0通过XML加载图片3d效果

    在本文中,我们将深入探讨如何使用AS3.0(ActionScript 3.0)通过XML来实现图片的3D效果加载。ActionScript是Adobe Flash Professional和Flex Builder等工具中的编程语言,广泛用于创建互动性的Web内容,而XML则是一...

    as3.0 源码

    在这个“as3.0 源码”压缩包中,我们很可能会找到与使用AS3.0读取XML数据和动态添加动画相关的源代码。Flash实例通常指的是在Flash环境中创建的SWF文件或对象,它们可以包含AS3.0编写的代码。 在AS3.0中,XML是一种...

    AS3.0读取xml外调图片并滚动

    在本文中,我们将深入探讨如何在AS3.0(ActionScript 3.0)中使用XML来读取外部图片,并实现图片的滚动展示。ActionScript是Adobe Flash Professional和Flex Builder等开发工具中用于创建交互式内容的主要编程语言,...

    as3.0 开发的钟表型动画Loading源码

    1. **使用Loader类**:在AS3.0中,`Loader`类是负责加载内容的核心。我们可以创建一个`Loader`对象,然后调用其`load()`方法来加载资源。同时,`Loader`对象的`contentLoaderInfo`属性可以提供关于加载进度的信息,...

    AS3.0类 flash 抽象类工具包

    AS3.0(ActionScript 3.0)是Adobe Flash平台上的主要编程语言,用于创建交互式内容、游戏和应用程序。这个"AS3.0类 flash 抽象类工具包"是一个专为AS3.0开发者设计的实用工具集合,尤其对新手极其友好。它包含了...

    15款as3.0小游戏

    - **Loader类**:加载图片、SWF、XML等外部资源。 - **AssetManager**:自定义资源管理器,用于统一管理和缓存游戏资源。 8. **物理引擎** - 虽然简单小游戏可能不涉及复杂的物理模拟,但了解Box2D或P2.js等物理...

    ActionScript+3.0+编程(中文版)

    1. 类与对象:在AS3.0中,一切都是对象,每个对象都是某个类的实例。类定义了对象的属性和方法,而对象则是类的实体化。 2. 继承:AS3.0支持单继承,一个类可以继承另一个类的属性和方法,实现代码复用。 3. 封装:...

    as3.0简单相册源码

    AS3.0提供了内置的XML和JSON类,可以轻松地解析这些数据,并动态加载和显示图片。 【优化与性能】 考虑到Flash的性能限制,尤其是在处理大量图片时,优化代码至关重要。这可能包括合理使用缓存、减少不必要的计算...

    Flash AS3.0 Loading an External Image

    首先,我们需要理解AS3.0中的Loader类。Loader类是负责加载不同类型的媒体内容,包括图像(JPEG、PNG、GIF等)的核心组件。以下是一个基本的步骤来实现外部图片的加载: 1. **创建Loader对象**: 在AS3.0代码中,...

    as3.0 人物行走源码

    AS3.0(ActionScript 3.0)是Adobe Flash平台上的主要编程语言,用于创建交互式内容,尤其是网络游戏。在"as3.0 人物行走源码"这个项目中,我们可以深入学习如何利用AS3.0实现游戏中的角色动画和行走功能。 1. **...

    XML+flash动态显示图片

    在Flash中,我们可以使用ActionScript 3.0(AS3)来解析这个XML文件。首先,我们需要加载XML文件,这可以通过`XMLLoader`类实现,代码如下: ```actionscript var xmlLoader:URLLoader = new URLLoader(); ...

Global site tag (gtag.js) - Google Analytics