使用actionscript3.0构建一个异步加载图片的画廊(三)

发布于,归属于actionscript3沙发还空着,抢! 共有378人围观    

引言


上一篇教程明河讲解了如何使用actionscript3.0构建滚动条,代码难度不大,接下来的代码会不断加大难度,今天明河主要讲解如何使用actionscript3.0读取和处理xml(明河已经在代码内加了非常详实的中文注释,所以这里只讲述关键代码和思路)。

使用actionscript3.0读取和处理xml

1、创建xml

原英文教程,是使用php生成xml,这里明河做了简化,直接使用一个静态xml,请看示例包(点此进入第一篇教程下载)中test.xml
创建类似的xml结构:

  1. <xml>
  2.     <img>data/9dian.png</img>
  3.         .......
  4. </xml>

img标签内包含的是图片路径,测试图片存放在示例包中的data文件夹。

2、读取xml

一、打开lib.Gallery
二、定义变量

  1. //图片集数据路径
  2.         private var backend:String = "test.xml";
  3.         //xml数据读取器
  4.         private var xmlLoader:URLLoader = new URLLoader;
  5.         //XML数据
  6.         private var xdata:XML;

三、读取xml,并监听完成事件
在构造函数加入如下代码

  1. //加载xml
  2.             xmlLoader.load(new URLRequest(backend));
  3.             //监听完成事件
  4.             xmlLoader.addEventListener(Event.COMPLETE,loadImages);

这里明河要提醒下,由于xml文件和图片数据就在项目文件夹下,不牵涉到跨域访问的问题,在实际应用中,必然会遇到安全沙盒的问题,如何解决跨域访问,这里明河不详述,可以点此查看这篇文章做个参考。

3、处理xml

一、定义图片剪辑数组变量

  1. //图片数组
  2.         public var images:Array = new Array();

二、来看loadImages函数
loadImages当在读取完xml后执行

  1. private function loadImages(_e:Event):void{
  2.              xdata = new XML(_e.target.data);
  3.              var i:Number = 0;
  4.              //遍历xml
  5.              for each(var img:XML in xdata.img){
  6.                  //创建图片剪辑实例
  7.                 images[i] = new Img(img,this);
  8.                 //设置图片剪辑位置
  9.                 images[i].x = 200 * i;
  10.                 images[i].id = i;
  11.                 i++;
  12.              }
  13.         }

最关键部分:

  1. //创建图片剪辑实例
  2.                 images[i] = new Img(img,this);

这里的数组存储的不是图片,而是图片剪辑对象。Img类是MovieClip的子类,接受二个参数,第一个为图片路径,第二个为主文档对象。
图片和图片剪辑务必区分开,图片剪辑对象包含有图片和图片名二个子对象。

  1. //设置图片剪辑位置
  2.                 images[i].x = 200 * i;
  3.                 images[i].id = i;

设置图片剪辑的x轴位置和id(id即是数组的索引值)
Img类将在下一期教程中详解。

(如果您喜欢这篇教程,可以通过支付宝打赏我们1元哦,拜谢!)

跟作者说两句

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-? :) :( :!: 8-O 8)