Graphics 版 (精华区)
发信人: Doitforyou (我天天都来), 信区: Graphics
标 题: Flash5ActionScript教程 十二
发信站: 哈工大紫丁香 (2001年04月29日08:57:44 星期天), 站内信件
关于变量
变量是存储信息的容器。容器本身总是相同的,但内容可以改变。当播放动画时,
通过变量可以记录和保存用户操作的信息,记录动画播放时改变了的值,或者计算某些
条件是真还是假。
在首次定义一个变量时,最好赋给它一个已知的值,这称为初始化变量。初始化变
量常常是在动画的第一帧进行。对变量初始化使我们能够在播放动画时更容易跟踪和比
较变量的值。
变量可以存储任意类型的数据:数值、字符串、逻辑值、对象或电影剪辑。在脚本
中给变量赋值时,变量存储数据的类型会影响该变量的值如何变化。
变量可以存储的典型信息类型包括URL、用户名、数学运算结果、事件发生的次数,
或一个按钮是否已被单击。 每个动画或电影剪辑实例都有它自己的一组变量,每个变量
都有它自己的值,并与其它动画或电影剪辑中的变量无关。
一、命名变量
给变量命名必须遵守以下规则:
变量名必须是一个标识符。
变量名不能是一个关键字或逻辑常量(true 或false)。
变量名在它的作用范围内必须是唯一的(参阅变量的作用范围)。
二、变量的类型
在Flash中,无需显式定义一个变量是存储数值、字符串或其它数据类型。Flash在
给变量赋值时自动确定变量的数据类型:
x = 3;
在表达式x = 3中, Flash计算操作符右边的元素,确定它是属于数值型。后面的赋
值操作会改变x的类型。例如,x = "hello"会把x的类型改为字符串型。没有赋值的变量
的数据类型为undefined(未定义型)。
当表达式请求时,ActionScript自动转换数据类型。例如,当你把一个值传递给tr
ace 动作时,trace 自动把该值转换为字符串,并把它传送到输出窗口。在包含操作符
的表达式中,ActionScript根据需要转换数据类型。例如,当使用一个字符串时,+操作
符要求另一个操作数也是字符串:
"Next in line, number " + 7
ActionScript把数值7转换为字符串"7",并把它添加到第一个字符串的末尾,生成
下面的字符串:
"Next in line, number 7"
在调试脚本时确定表达式或变量的数据类型,对了解它们在动画播放时起什么作用
是很有用的。使用typeof 操作符可以确定表达式或变量的类型,如下例所示:
trace(typeof(variableName));
使用Number函数,可以把字符串转换为数值。使用String函数,可以把数值转换为
字符串。请参阅ActionScript词典中它们各自的词条。
三、变量的作用范围
变量的作用范围是指能够识别和引用该变量的区域。在ActionScript中,变量可以
是全局的和局部的(或称本地的)。全局变量可以在所有时间轴中共享;局部变量仅在
它所在的代码块(大括号之间)中有效。
可以在脚本中用var语句声明一个局部变量。例如,变量i和 j常常被用作循环计数
器。在下面的例子中,i被用作局部变量,它仅存在于函数 makeDays内部:
function makeDays(){
var i
for( i = 0; i < monthArray[month]; i++ ) {
_root.Days.attachMovie( "DayDisplay", i, i + 2000 );
_root.Days[i].num = i + 1;
_root.Days[i]._x = column * _root.Days[i]._width;
_root.Days[i]._y = row * _root.Days[i]._height;
column = column + 1;
if (column == 7 ) {
column = 0;
row = row + 1;
}
}
}
使用局部变量有助于防止名字的冲突。在动画中名字的冲突会引起错误。例如,如
果你用name作为局部变量,你就可以在一个脚本中用它来存储用户名,而在另一个脚本
中存储电影剪辑实例名, 因为这些变量存在于彼此分开的范围内,不会发生冲突。
在函数体内最好使用局部变量。这样,这个函数就可以作为一段独立的代码。局部
变量仅在它的代码块中是可变的。如果函数内的一个表达式使用了一个全局变量,在该
函数以外的某些操作可能会改变它的值,因而也就可能改变了该函数。
四、声明变量
使用setVariables动作或赋值操作符 (=) 可以声明全局变量,两个方法的结果相同
。
在函数体内使用var语句声明局部变量。局部变量的作用范围限定在声明它的代码块
中,并在代码块结束时失效。没有在某个代码块中声明的局部变量在它们的脚本结束时
失效。
注:call动作可为它调用的脚本创建新的局部变量作用范围。退出被调用的脚本时
,该局部变量失效。不过,在Flash 5中,建议不再使用call动作,而用with动作取代它
。with动作与点语法的兼容性更好。
要测试变量的值,可以使用trace动作把变量的值传送到输出窗口。例如,trace(h
oursWorked)传送变量hoursWorked的值到测试动画模式中的输出窗口。也可以在测试动
画模式的调试器中检查和传送变量的值。
四、声明变量
使用setVariables动作或赋值操作符 (=) 可以声明全局变量,两个方法的结果相同
。
在函数体内使用var语句声明局部变量。局部变量的作用范围限定在声明它的代码块
中,并在代码块结束时失效。没有在某个代码块中声明的局部变量在它们的脚本结束时
失效。
注:call动作可为它调用的脚本创建新的局部变量作用范围。退出被调用的脚本时
,该局部变量失效。不过,在Flash 5中,建议不再使用call动作,而用with动作取代它
。with动作与点语法的兼容性更好。
要测试变量的值,可以使用trace动作把变量的值传送到输出窗口。例如,trace(h
oursWorked)传送变量hoursWorked的值到测试动画模式中的输出窗口。也可以在测试动
画模式的调试器中检查和传送变量的值。
五、在脚本中使用变量
必须在脚本中声明一个变量,然后才能表达式中使用这个变量。如果在脚本中使用
了一个没有声明的变量(如下例所示),该变量的值就是undefined,将产生一个错误:
getURL(myWebSite);
myWebSite = "http://www.shrimpmeat.net";
在上例中,声明变量myWebSite的语句必须排在前面,以便在getURL动作中的这个变
量能够被一个值代替。
可以在脚本中多次改变一个变量的值。这个变量包含的数据类型将影响它怎样变化
和何时变化。在下面的例子中,x被设为15,且它的值被拷贝给y。当x变为30时,y的值
仍然是15,因为y并没有从x中取值。y存储的是传递给它的x的值。
var x = 15;
var y = x;
var x = 30;
在下面的例子中,变量in存储了一个原始值9。因此,该实际值被传递给sqrt函数,
返回值是3:
function sqrt(x){
return x * x;
}
var in = 9;
var out = sqrt(in);
在上面的例子中,是把变量in的值9传递出去,而变量in本身的值没有改变。这种值
的传递方式称为传值。
--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.230.218]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.435毫秒