为Flash 6创建一个XML驱动的图像滚动
翻译:Enews2#cnet.com 来自:http://builder.com.com
在创建这个对象的代码的时候,我做了几个假设。首先假设结果集中总会有CScroll.depth节点或者多个<model>节点。然后还假设所有的图像都是高100个像素宽80个像素。这样就使得编码和理解起来都比较简单。代码中没有异常处理机制,但是如果我基于这些假设使用这个对象,就不会出现任何问题。这也就是说我需要保证图像的大小为80X100,并且结果集中至少要有一个CScroll.depth节点。
当一个CScroll对象被实例化的时候,其属性被设为默认值。属性depth由构造方法的depth参数设置。CScroll.depth movieClips被创建,然后被添加到_root movieClip中,每个movieClip都被加入到scrollArray数组以便引用。你会发现每个movie clip的_x属性都是承接上一个_x属性,值为80。movie()方法设置在构造方法内部。move()和init()方法被连接到相应的外部函数:navigate和initScroll。
一旦CScroll对象实例化完成,你可以将XML“绑定”到CScroll对象并填充图像;这一步通过init()方法完成。使用init()方法,将传入XML文档作为参数传入,init()方法将抓取每个<model>节点的<sm>节点的文本,然后用定义的图像填充可用的movieClips。另外两个在CScroll对象上设置的重要属性――xmlDocument属性和nodeCount属性――用于导航管理。xmlDocument代表你传入的XML文档,nodeCount属性是你的XML文档中<model>节点的数目。
move()方法期望一个方向参数:+1表示向左移动,-1表示向右移动。这些参数可以通过一个按钮点击事件传入。CScroll对象的导航是循环的,如果XML文档中最后一个<model>节点已被取出,那么下一个取出的节点是将是树的第一个节点,反之亦然。这在导航函数(move()方法)的前几行指定。
再增加几行代码使每个movieClip根据指定的方向要么向左要么向右移动80个像素。如果是向左移动,movieClip的_x属性被检查是否是其所在的位置。如果是-160像素(向左移动两步),movieClip会被置于最右端,面下一个指定的图像被装载到它的位置。如果是向右(80 * (CScroll.depth - 2))个像素(向右移动两步),movieClip会被置于最左端,面下一个指定的图像被装载到它的位置。
当前的节点号(被跟踪的节点)是滚到区域的最右边的节点。因此,当向右移动的时候,你必须下移(CScroll.depth - 2)个节点装载指定的图像。而且,如果那个值小于0(第一个节点的索引值),你就必须将当前的节点重置到链表的顶部:if (the_node < 0) the_node += (this.nodeCount + 1)。
余下唯一要做的事是实例化和使用对象。下面是其代码:
代码拷贝框
var myXML = new XML();
myXML.onLoad = myXML_onload;
myXML.ignoreWhite = true;
var Scroll = new CScroll(8);
myXML.load("http://localhost/Development/Model/getModels.asp");
function myXML_onload(success) {
if (success and myXML.status == 0 and myXML.hasChildNodes()) {
Scroll.init(myXML);
}
}
function fwd_onclick() {
Scroll.move(1);
}
function rev_onclick() {
Scroll.move(-1);
}
[Ctrl+A 全部选择 然后拷贝]
上面的代码实例化一个XML对象。XML的onLoad事件处理函数设置为myXML_onload。然后创建一个新的CScroll对象Scroll。最后从一个HTTP源装载XML数据。在XML数据被装载和解析完成之后,调用Scroll的init()方法并传入myXML。这样就使用必要的图像填充了图像滚动。最后,我为Scene上的几个Flash按钮组件添加点击事件处理函数。
如果你需要这个例子的源代码,可以从这里下载。有关Flash的XML功能的信息,请查阅Flash的帮助文件。
如果你需要帮助创建一个数据的XML服务器端解决方案,给我发邮件 Enews2#cnet.com ,我会尽我所能给予您帮助。