Graphics 版 (精华区)

发信人: Doitforyou (我天天都来), 信区: Graphics
标  题: Flash5ActionScript教程 三
发信站: 哈工大紫丁香 (2001年04月29日08:47:18 星期天), 站内信件

二、脚本的规划和调试
  当你为整个动画编写脚本时,脚本的数量和种类可能很大。决定使用哪些动作,怎
样有效地构造脚本,脚本应该放在何处,所有这些都要仔细规划和调试,特别是在动画
复杂的情况下更应如此。
  在开始编写脚本之前,首先要明确目标和要达到的目的。从写出你希望在动画中发
生什么事情开始着手,如下例所示:
我想用Flash创建我的整个网站。
需要询问网站浏览者的姓名,并把这些信息用之于整个网站的消息中。
本网站将设置一个可拖放的导航栏,该导航栏中应有一些链接到本网站各个部分的按钮

当一个按钮被单击时,新的部分将淡入舞台中心。
一个场景将包含一个联系表单,表单中已经填写了用户的姓名。
  当你明确了自己的设计目标之后,你就可以创建对象,编写控制这些对象的脚本了
。要让脚本能够按照你的要求工作,常常需要多次修改、测试和调试。最好的方法是从
简单开始,并经常测试你编写的脚本。当你编写的一部分脚本能正常工作时,选择Save
 As(另存为)命令,保存文件的版本(如myMovie01.fla),然后再开始编写余下的部
分。当你编写更为复杂的脚本时,这种方法有助于你有效地发现错误,确保你的动作脚
本“稳固”。
三、面向对象的脚本编写
  在面向对象的脚本编写中,通过把信息分为组(称为类) 来组织信息。可以创建一
个类的多个实例(称为对象),用于你的脚本之中。可以使用ActionScript的预定义类
,也可以创建自己的类。
  在创建类时,要定义该类创建的每个对象的所有属性和方法,就像定义现实世界中
的对象一样。例如,一个人拥有诸如性别、身高、发色等属性和谈吐、走路、投掷等方
法。在本例中,“人”是一个类,每一个人就是一个对象或该类的一个实例。
  ActionScript中的对象可以包含数据或作为电影剪辑以图像形式出现在编辑区中。
所有的电影剪辑都是预定义类MovieClip的实例。 每个电影剪辑实例均包含MovieClip类
的所有属性(例如_height、_rotation、_totalframes)和方法(如gotoAndPlay、loa
dMovie、startDrag)。
  要定义一个类,就要定义一个函数(称为构造函数)。预定义类拥有已经定义的构
造函数。例如,如果你需要关于动画中自行车骑士的信息, 你就要创建一个构造函数B
iker,该构造函数拥有time(时间)、distance(距离)属性和rate(速度)方法,给
出该骑士的旅行速度:
function Biker(t, d) {
 this.time = t;
 this.distance = d;
}
function Speed() {
 return this.time / this.distance;
}
Biker.prototype.rate = Speed;
  然后,你可以创建该类的一个拷贝—即实例。下面的代码创建对象Biker的实例,称
为emma和hamish。
emma = new Biker(30, 5);
hamish = new Biker(40, 5);
  实例之间可以互相通讯。对于Biker对象,你可以创建称为shove的方法,让一个骑
士推另一个骑士。如果hamish靠得太进,实例emma可能会调用它的shove方法。要把信息
传递到方法中,可以使用参数。例如,shove方法可能有两个参数who和howFar。在本例
中,emma推hamish 10个像素:
emma.shove(hamish, 10);
  在面向对象的脚本编写中,依据指定的顺序,类可以相互接收属性和方法,这称为
继承。你可以利用继承来扩展或重定义一个类的属性和方法。从其它类继承而来的类称
为子类,传递属性和方法到另一个类的类称为父类。一个类可以是子类,也可以是父类

四、MovieClip对象
  ActionScript的预定义类称为对象。每个对象允许你访问某种类型的信息。例如,
Date(日期)对象拥有一些方法(如getFullYear、getMonth),使你能够从系统时钟读
取信息。Sound(声音)对象拥有一些方法(如setVolume、setPan),使你能够控制动
画中的声音。MovieClip(电影剪辑)对象拥有一些方法, 使你能够控制电影剪辑的实
例(如play、stop和getURL),获取和设置关于它们的属性的信息(如_alpha、_frame
sloaded、_visible)。
  电影剪辑是Flash动画中最重要的对象,因为它们拥有独立运行的时间轴(Timelin
es)。例如,如果主时间轴仅有一帧,而该帧中的电影剪辑有十帧,电影剪辑中的每一
帧仍然可以播放。这就允许实例作为一个自治对象,这些自治对象可以相互通讯。
  每个电影剪辑实例都有一个唯一的名字。因此,你可以把动作分配给它们。例如,
你可以在编辑区中放置多个实例(如leftClip和rightClip),且希望某个时刻只播放其
中一个。当你要分配指定播放一个特定的实例的动作时,就需要用到它的名字。在下面
的例子中,电影剪辑的名字是leftClip:
leftClip.play();
  通过实例名,可以在动画播放时复制、删除和拖放电影剪辑。下面的例子复制实例
cartItem,把大量购买的物品装入购物车。
onClipEvent(load) {
 do {
  duplicateMovieClip("cartItem", "cartItem" + i, i);
  i = i + 1;
 } while (i <= numberItemsPur);
}
  电影剪辑拥有属性,你可以用动作脚本动态设置和恢复属性的值。改变和读取这些
属性可以改变动画的外观和标识,也是创建交互性的关键。 例如,下面的脚本使用set
Property动作,设置navigationBar实例的透明度为10:
setProperty("navigationBar", _alpha, 10);
五、脚本怎样流动
  动作脚本遵循逻辑流动。Flash执行动作脚本语句,从第一句开始,然后按顺序执行
,直至到达最后的语句或指令跳转到其它地方的语句。把ActionScript送到某个地方而
不是下一语句的一些动作是if语句、do...while循环和return动作。
if..else动作的流程图
do..while动作的流程图
  if语句称为条件语句或“逻辑分支”,因为它依据某个条件的计算结果控制着脚本
的流向。例如,以下的代码检查number变量的值是否小于或等于10。 如果检查结果返回
true(例如number的值为5),变量alert被设置,并在文本输入域中显示它的值。如下
所示:
if (number <= 10) {
alert = "The number is less than or equal to 10";
}
  也可以在上例中加入else语句,创建一个更复杂的条件语句。在下面的例子中,如
果条件的返回值为true(例如number的值为3),第一对大括号中的语句被执行,且第二
行中的变量alert被设置。如果条件的返回值为fasle(例如number的值为30),第一代
码块被跳过,else语句后的大括号中的语句被执行。 如下所示:
if (number <= 10) {
alert = "The number is less than or equal to 10";
} else {
alert = "The number is greater than 10";
}
  循环重置执行动作数次或直到某个条件满足。在下面例子中,电影剪辑被复制5次:

i = 0;
do {
duplicateMovieClip ("myMovieClip", "newMovieClip" + i, i);
newName = eval("newMovieClip" + i);
setProperty(newName, _x, getProperty("myMovieClip", _x) + (i * 5));
i = i + 1;
} while (i <= 5);

--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.230.218]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.783毫秒