在一个典型的使用脚本编辑的电影中,我们必须跟踪并操作每一件事情 —— 从帧的数字编号到用户的密码甚至是Flash游戏中的太空船发射出的光子鱼雷的速率。为了管理并操作所有这些信息,我们需要将它们存储在变量中,变量是ActionScript的主要信息存储容器。
一个变量就如同一个银行帐号,不同的是银行账号持有存款,而变量持有信息(数据)。创建一个新变量就如同设立一个新账号:我们建立一个场所(尽管它是虚拟的)用于存储未来需要的某些东西(钱和变量)。并且就象每个银行账号都有它的账号号码一样,每个变量也都有一个变量名。可以通过账号号码来处理(取出和存入)账号中的存款;同样地,可以通过变量名来访问变量中的数据。
一旦某个变量被创建,我们可以随时将新的数据放入其中 —— 如同向账号中存钱。或者我们可以通过使用变量名来发现该变量中存储的数据是什么 —— 如同查询账号的收支平衡表。如果我们不再需要该变量,可以象注销账号那样删除该变量。
需要注意的关键点是:变量让我们可以使用数据,这些数据在电影播放过程中既可以改变也可以用于计算。尽管银行账号的余额发生变化但是账号号码保持不变,同样地,尽管变量中包含的数据可以改变但是变量名是固定不变的;通过使用固定的变量名来访问变量中所包含的可变化的内容,我们可以完成复杂的数学计算、跟踪扑克游戏中的每个单牌、保存访客名册的输入、或者根据条件的改变派遣播放头到不同的位置,以及其他各种各样的任务。
你的眼睛兴奋地闪亮吗?很好,不过,我想那些关于银行账号的比喻可能让你迷惑,让我们通过观察如何创建变量来开始对其的探索。
2. 创建变量
创建一个变量在术语中称为声明。如果还使用银行账号的比喻,那么声明等同于“开设一个账号”,在这一步中我们正式地使变量事实存在。当一个变量被首次声明时,它是空的 —— 好像一张白纸等着你在上面写点什么,在这种状态下,该变量包含一个特殊的值,称为:undefined(未定义或无数据)。
为声明一个新变量,我们使用var语句。例如:
var speed;
var bookTitle;
var x;
单词var告诉解释器我们正在声明一个变量,而随后的文本,如speed,bookTitle,或者x,都成为我们的新变量名。我们可以在任何能够附着代码的地方创建变量:一个关键帧、一个按钮、或一个电影剪辑。
我们也能够使用一个var语句来声明多个变量,象这样:
var x, y, z;
不过,这样做削弱了我们为相邻的每个变量加注释的能力。
一旦某个变量被创建,我们可以为其赋值。但是,在我们学习如何为变量赋值之前,让我们考虑一些变量声明中的敏感细节。
1.变量自动生成
许多编程语言都要求在将数据存入变量之前必须首先声明变量;忽略声明会导致错误发生。ActionScript并不是那么严格,如果我们向一个并不存在的变量(未声明的变量)赋值,解释器会为我们创建一个新变量。银行,继续那个比喻,会自动地开设一个账号 —— 当你还没有账号但是试图做第一次存款时。
当然,这种便利需要代价。如果我们不主动声明变量,在检查代码的时候就不会有详细的程序清单作为参考;此外,用var语句显式地声明变量和由解释器隐式地声明变量(即允许自动生成变量)对比,有时会产生不同的结果。先声明然后使用(即显式声明)是最安全的方式,贯穿本书,我们将全部使用显式声明变量的方式。
2.合法变量名
在开始创建变量之前,首先要明了变量名:
√ 变量名必须由且仅由字母、数字,和下划线组成。任何空格、破折号、或其他的标点符号都是不被允许的。
√ 变量名必须由且仅由字母或下划线开头。
√ 变量名必须不能超过255个字符。好吧,好吧,这是一句谎话,不过,如果你的变量名真的超过了255个字符,请重新评估一下你的变量命名策略吧。
√ ActionScript的变量名是大小写不敏感的。大写字母和小写字母被认为是完全一样的,尽管如此,你仍应该保持变量名使用的一致性。
这是一些合法的变量名:
var first_name;
var counter;
var reallyLongVariableName;
var i;
而这些是不合法的变量名,它们将导致错误的发生:
var 1first_name; // starts with a number
var variable name with space; // contains spaces
var another-illegal-name; // contains hyphens
2.1创建动态命名变量
尽管动态地创建变量名是很罕见的情况,但是,程序化地产生变量名仍是可能发生的事情。从任何表达式中创建一个变量名都需要使用set语句。例如,我们把值“bruce”赋给变量player1name:
var i = 1;
set ("player" + i + "name", "bruce");
数组和对象为我们提供了跟踪动态命名数据的更有效的手段,并且它们将用于替代动态的变量名,这些将在以后的章节中讨论。
3.在程序开始处声明变量
在每个电影的主脚本区的开始处声明变量是很好的习惯。所谓的主脚本区通常是紧随在电影预载部分之后的第一个关键帧。为了以后能容易地辨识变量,请确保为每个变量加注释以解释其用途。组织良好的脚本开端应该看起来象这样:
// ^^^^^^^^^^^^^^^^^^^^^^
// initialize variables
// ^^^^^^^^^^^^^^^^^^^^^^
var ballSpeed; // velocity of ball, max 10
var score; // player''''s current score
var hiScore; // high score (not saved between sessions)
var player1; // name of player 1, supplied by user
我们可以在创建变量的同时给它们赋初值,象这样:
var ballSpeed = 5; // velocity of ball, max 10, default 5
var score = 0; // player''''s current score
var hiScore = 0; // high score (not saved between sessions)