
- 本栏最新文章
- 用实例学习一步一步使用Flash AS3.0 脚本语言 04-04
- Flash AS3.0 实现FLASH的“动态链接库” 03-31
- Flash AS3.0 爽快使用XML 03-31
- 学习As2.0与AS3.0的尴尬 03-16
- AS打造的复制粘贴功能 03-14
- Flash as制作一个铅笔画图程序教程 03-07
- AS3中的数据存取方式效率比较 03-01
- AS3.0的类及绑定 03-01
- As3.0 decompiler反编译器 01-24
- As3.0 xml + Loader 01-24

- 本栏推荐文章
- ASP.NET设计网络硬盘之查看文件夹 04-29
- ASP.NET设计网络硬盘之文件夹实现 04-29
- ASP.NET设计网络硬盘之上传文件 04-29
- 小试ASP.NET 2.0的兼容性 04-29
- ASP 系列函数大全 04-29
- Asp.net Mvc Framework 九 (View与Controlle... 04-04
- 【翻译】动态调用样式表代码 04-04
- Flash AS3.0 实现FLASH的“动态链接库” 03-31
- Flash AS3.0 爽快使用XML 03-31
- MySQL的LIST分区体验与总结 03-27
As3.0 xml + Loader
简介:其实很简单是两部分组成的,只是两个MC,rejigger_mc和loadPic_mc,前者是负责加载XML以及如何显示图片的整个SWF的主干,而后者只是为了加载图片显示进度的一个小零件。 以前2.0时,我把代码分别写在rejigger_m ...
关键字:as3.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);
好了,导出去测试一下。
以前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);
好了,导出去测试一下。


