ActionScript 2.0 车间-表单屏幕 |
| 作者:xiangmin… 来源:蓝色理想 更新:2005-8-4 13:21:56 错误报告 我要投稿 |
第9章 表单屏幕
生存还是死亡 ·表单屏幕是内容组织到屏幕的特殊的Flash文件,就像一系列幻灯片。 ·用户的趋向经过屏幕可依赖于用户的开始的屏幕。这对于向导可能有用。
屏幕和幻灯片在MX2004里是新功能。这些特征,就像是PowerPoint功能内置到Flash中。也就是说,你可以使用影片剪辑、表单元素等等来创建一串幻灯片。 这里我们没有涉及如何创建屏幕和幻灯片的细节。我们快速地概览然后拆分一些代码。
概览 屏幕文件不同于一般的Flash影片。它是你在创建文件时所选择的,如图9.1。
 图9.1 看,一个屏幕文件正被选择
接着你创建几个屏幕,在上面放一些元素,获得如图9.2所示的简单的结果。
图9.2 非常简单的屏幕文件
典型的主屏幕(这里是“application”)是空的。它是所有其它屏幕的容器。
酷 关于屏幕的一个很酷的情况是用户翻阅屏幕不必从上到下一条线地浏览。你可以按照逻辑打乱,使用户从一组屏幕转到另一组。可以随意,因为基于用户的操作你可以放置不同的屏幕。
固定代码 当我们不想所有的表单(这里是form1和form2)同时都可见的话,我们隐藏第二个。 _root.application.form2.visible = false; 这里我们惟一需要关注的是从一个表单转移到另一个表单:当用户点击下一步按钮时,旧的表单消灭并且新的表单显示。让我们写一个函数来保管它。 function nextScreen(oldFormName, nextFormName) { this[oldFormName].visible = false; this[nextFormName].visible = true; } 不是太困难,嗯?记住这是在应用屏幕,也被称作是应用程序。我们也可以这样写: function nextScreen(oldFormName, nextFormName) { _root.application[oldFormName].visible = false; _root.application[nextFormName].visible = true; } 当应用程序是所有其它屏幕的容器时,另一个屏幕则扮演应用程序的孩子。 现在,在form1屏幕里,有一个按钮命名为form1_btn。在form1的第一帧上有些代码: form1_btn.onRelease = function () { _parent.nextScreen("form1", "form2"); } 当form1是应用程序的孩子时,我们使用_parent寻找应用程序的下一屏幕。如下: form1_btn.onRelease = function () { _root.application.nextScreen("form1", "form2"); } 这里也有一个直接参照顶级屏幕的叫做rootScreen的属性,(重复一遍,应用程序)。 form1_btn.onRelease = function () { rootScreen.nextScreen("form1", "form2"); } 它跟前面是一样的。 顺便提一下, this.rootScreen.nextScreen("form1", "form2"); 不能工作,得戒掉this。
扩展 这里除了关于on(reveal)方法,时间轴和事件侦听器之外没有讲太多。
问答 为何要为表单或是屏幕而烦心?老实讲,在我的工作中没有发现它有多大的需要,但是我不使用它们时正好也可能会有用。它在制作用户必须经过一系列分离的屏幕的向导中可能会比较有用。 on(reveal) 当屏幕出现时,它有多个事件,这样如果你想当某个屏幕显示时执行某段代码的话,使用如下: on(reveal) { // code }
屏幕和时间轴 屏幕是由影片剪辑派生出来的,并且它们也有时间轴,虽然被隐藏了。你可以在上面创建动画并且可以做任何你在某个普通影片剪辑上想做的东西。 然而,使用屏幕不过是为了废除时间轴。这样,如果你决定需要时间轴的话,你得反思一下用表单屏幕代替常规的影片剪辑和帧是否恰当。
屏幕和事件侦听器 注意屏幕(还有幻灯片)的所有事件对于使用事件侦听器系统来讲都是公开的。这就意味着当特定的事件发生时你得使用侦听器对象来让函数运行。也就是说,这段代码将工作: loadListener = new Object(); loadListener.load = function { // do stuff. Impress me! } this.addEventListener("load", loadListener); this提交到屏幕本身。 下面的代码不能工作: this.onLoad = function() { // do stuff } 屏幕从Loader组件继承,每个屏幕都是一个mx.screens.From类的实例。屏幕也可以作为一个类,在屏幕上点击可以看到它的属性。(如图9.3)
 图9.3 屏幕的类 |
|
| 文章录入:skyuu 责任编辑:skyuu |
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |