第一课 数据与变量

闪客沙龙

文/小东瓜、莫治雄 整理/大成

 

前言

  在Flash4时代,很多人对Flash的认识是以为它只是一个网页动画制做软件,只能做一些简单动画,其实这种认识是非常肤浅的,它不但能制做动画,而且还能编程,可以制做网络游戏,可以跟后台进行交互。进入到Flash5时代后,它的编程功能更加强大,内置了二百多条命令与函数。可以完成非常强大的编程功能。
  有很多朋友问到Flash的Action怎么学,其实学习编程语言根本没有任何捷径,唯一的办法就是不断地学习与实践。很多Flash教程讲编程时总是先讲一些基本语句的用法,操作数的基本概念,然后列出一大堆命令的用法,非常枯燥,许多人在学了一段时间后还是不知如何编程。我们虽然也脱离不了这种方式,但希望通过浅显易懂讲解能够让你明白这些基本概念,能够快速地入门。
  在各种编程语言中,数据类型是组成程序的最基本单位。在人的眼中,事物都有各自独立的特性,比如一张桌子,它有长、宽、高等特性,而描述这种特性,就得用数字来表示。再比如人口中说出的话,这在平时人根本不会注意,但是如果把人说出的一段话用笔记下来的话,就是一段文字,等等,而在计算机世界里表示这些内容就要有计算机自己的方式,第一种方式就叫数值,第二种方式就叫字符串。让我们来介绍这些基本概念。

  ActionScript与JavaScript核心编程语言很相似,同样具有函数、变量、语句、操作符、条件和循环等基本的编程概念。不了解JavaScript也可以学习和使用ActionScript。但是,如果了解JavaScript,你就会对ActionScript感到熟悉,反过来,学会使用ActionScript编程,JavaScript也会无师自通,只不过ActionScript用在FLASH上,而JavaScript常用在网页制作上。

 

一、数据:


 数据类型说明一个变量或ActionScript元素可以存储的信息种类。在Flash 5的ActionScript中有两种数据类型:原始数据类型(Primitive )和引用数据类型(Reference)。原始数据类型(如字符串、数值、逻辑值)有一个常数值。因此,可以存储它们所代表的元素的实际值。引用数据类型(如电影剪辑和对象)拥有可以改变的值。因此,包含了对该元素的实际值的引用。存储原始数据类型数据的变量的行为在某些情况下与存储引用数据类型数据的变量不同。每一种数据类型都有自己的规则,下面将作简要介绍。

1、字符串

  字符串是一个字符(字母、数字和标点符号)序列。在ActionScript语句中输入字符串,使用单引号或双引号括住。字符串作为字符来处理而不是作为变量来处理。例如,在下面的语句中,“闪客沙龙”是一个字符串:


a = "闪客沙龙";
  你可以用加号(+)操作符连接两个字符串。ActionScript把字符串前后的空格作为字符串的一部分来处理。

b = "欢迎您到" + a + "来!";
  
  

2、数值

  数值数据类型是一个双精度浮点数。可用数学运算符加(+)、减(-)、乘(*)、除(、)、取模(%)、递增(++)、递减(--)处理数值。如:

i = 4;

i = i + 1;


3、逻辑值

  逻辑值是true(真)或false(假)。需要时,ActionScript 也把true和false转换为1和0。逻辑值与逻辑操作符一起,常常被用在控制脚本流动的比较语句中。例如

c = true

e = false

在Action中,通常也把对象和电影剪辑也看成数据类型,这两种数据类型在后面还要阐述。

二、 变量:

  变量是存储信息的容器。容器本身总是相同的,但内容可以改变。当播放动画时,通过变量可以记录和保存用户操作的信息,记录动画播放时改变了的值,或者计算某些条件是真还是假。

  在首次定义一个变量时,最好赋给它一个已知的值,这称为初始化变量。初始化变量常常是在动画的第一帧进行。对变量初始化使我们能够在播放动画时更容易跟踪和比较变量的值。

  变量可以存储任意类型的数据:数值、字符串、逻辑值、对象或电影剪辑。在脚本中给变量赋值时,变量存储数据的类型会影响该变量的值如何变化。

  变量可以存储的典型信息类型包括URL、用户名、数学运算结果、事件发生的次数,或一个按钮是否已被单击。 每个动画或电影剪辑实例都有它自己的一组变量,每个变量都有它自己的值,并与其它动画或电影剪辑中的变量无关。

1、命名变量

给变量命名必须遵守以下规则:
变量名必须是一个标识符。
变量名不能是一个关键字或逻辑常量(true 或false)。该列表中用到的词汇都是Action的关键字,不可作为变量名。
变量名在它的作用范围内必须是唯一的(参阅变量的作用范围)。

2、变量的类型

  在Flash中,无需显式定义一个变量是存储数值、字符串或其它数据类型。Flash在给变量赋值时自动确定变量的数据类型:

i = 3;

  在表达式i = 3中, Flash计算操作符右边的元素,确定它是属于数值型。后面的赋值操作会改变N的类型。例如,

N = "drop";

会把drop的类型改为字符串型。没有赋值的变量的数据类型为undefined(未定义型)。

  当表达式请求时,Action自动转换数据类型。在包含操作符的表达式中,Action根据需要转换数据类型。例如,当使用一个字符串时,+操作符要求另一个操作数也是字符串:

N = "drop" + i ;

  Action把数值3转换为字符"3",并把它添加到第一个字符串的末尾,生成下面的字符串,此时变量N等于:"dorp3" 。


 

3、变量的作用范围

  变量的作用范围是指能够识别和引用该变量的区域。在ActionScript中,变量可以是全局的和局部的(或称本地的)。全局变量可以在所有时间轴中共享;局部变量仅在它所在的代码块(大括号之间)中有效。


  使用局部变量有助于防止名字的冲突。在动画中名字的冲突会引起错误。例如,如果你用name作为局部变量,你就可以在一个脚本中用它来存储用户名,而在另一个脚本中存储电影剪辑实例名, 因为这些变量存在于彼此分开的范围内,不会发生冲突。

  在函数体内最好使用局部变量。这样,这个函数就可以作为一段独立的代码。局部变量仅在它的代码块中是可变的。如果函数内的一个表达式使用了一个全局变量,在该函数以外的某些操作可能会改变它的值,因而也就可能改变了该函数。

4、声明变量

  使用setVariables动作或赋值操作符 (=) 还有var可以声明全局变量,三种方法的结果相同。

set(x,9)

var x=9

x = 9

  在函数体内使用var语句声明局部变量。局部变量的作用范围限定在声明它的代码块中,并在代码块结束时失效。没有在某个代码块中声明的局部变量在它们的脚本结束时失效。

  注:call动作可为它调用的脚本创建新的局部变量作用范围。退出被调用的脚本时,该局部变量失效。不过,在Flash 5中,建议不再使用call动作,而用with动作取代它。with动作与点语法的兼容性更好。

  要测试变量的值,可以使用trace动作把变量的值传送到输出窗口。例如,trace(hoursWorked)传送变量hoursWorked的值到测试动画模式中的输出窗口。也可以在测试动画模式的调试器中检查和传送变量的值。

5、在脚本中使用变量

  必须在脚本中声明一个变量,然后才能表达式中使用这个变量。如果在脚本中使用了一个没有声明的变量(如下例所示),该变量的值就是undefined,将产生一个错误:


getURL(myWebSite);
myWebSite = "http://www.flasher123.com";

  在上例中,声明变量myWebSite的语句必须排在前面,以便在getURL动作中的这个变量能够被一个值代替。