当前位置:flash课件吧→flash文本教程(新页面 新改版 新气象) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
使用变量
变量是包含信息的容器。容器本身始终不变,但内容可以更改。通过在SWF文件播放时更改变量的值,可以记录和保存用户操作的信息,记录SWF文件播放时更改的值,或者计算某个条件是true还是false。 当首次定义变量时,最好为该变量指定一个已知值,这就是所谓的初使化变量,而且通常在SWF文件的第一帧中完成。初始化变量有助于在播放SWF文件时跟踪和比较变量的值。 变量可以包含任何类型的数据。变量中可以存储的常见类型包括URL、用户名、数学运算结果、事件发生次数,以及是否单击了某个按钮等等。每个SWF文件和影片剪辑实例都有一组变量,每个变量都有其各自的值,与其他SWF文件或影片剪辑中的变量无关。要测试变量的值,可以使用trace()动作向“输出”面板发送值。例如,trace(hoursWorked)会在测试模式下将变量hoursWorked的值发送给“输出”面板。也可在测试模式下,在调式器中检查和设置变量值。
变量名称必须遵守下面的规则。
此外,不应将动作脚本语言中的任何元素用作变量名称,这样做可能会导致语法错误或意外的结果。例如,如果将一个变量命名为string,然后尝试使用new string()创建一个string对象,则这一新对象是未定义的。 动作脚本编辑器支持内置类和基于这些类的变量的代码提示。如果需要Flash为指定给变量的特定对象类型提供代码提示,则可以精确键入变量或使用特定的后缀为该变量命名。例如,假设键入以下代码: Var members:Array(); Members 只要一键入句点(。),Flash就会显示可用于Array对象的方法和属性的列表。
变量的范围是指变量在其中已知并且可以引用的区域。在动作脚本中有3种类型的变量范围。
要声明本地变量,可在函数体内部使用var语句。本地变量的使用范围只限于它的代码块,它会在该代码块结束时到期。 例如,变量i和j经常用作循环计数器。在下面的示例中,i用作本地变量,它只存在于函数makeDays()的内部: Function makeDays(){ Var I ; For (i=0;<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; Colum=colum+1; If(column==7){ Column=0; Row=row+1} } } }本地变量也可防止出现名称冲突,名称冲突可能会导致应用程序出现错误。例如,如果使用name作为本地变量,则可以使用它在一个上下文中存储用户名,而在另一胩上下文中存储影片剪辑实例名称。因为这些变量是在不同的范围中运行的,所以它们不会有冲突。 在函数中使用本地变量是一个很好的习惯,这样该函数可以充当独立的代码。本地变量只有在它自己的代码块中才是可更改的。如果函数中的表达式使用全局变量,则在该函数以外也可以更改它的值,这样也更改了该函数。 可以在定义本地变量时为其指定数据类型,这有助于防止将类型错误的数据赋给现有的变量。
时间轴变量可用于该时间轴中的所有帧上都初始化这些变量,应确保首先初始化变量,然后尝试在脚本中访问它。例如,如果将代码“var X=10;”放置在第20帧上,则附加到第20帧之前的任何帧上的脚本都无法访问该变量。
全局变量和函数对于文档中的每一时间轴和范围而言都是可见的。若要创建具有全局范围的变量,应在变量名称前使用-global标识符,并且不使用var=语法。例如,以下代码创建全局变量myName: Var-global.myName=“George”;//语法错误-global.myName=“George”; 但是,如果使用与全局变量相同的名称初始化一个本地变量,则在处于该本地变量的范围内时对该全局变量不具有访问权限: -global.counter=100; Counter++; Trace(counter);//显示101 Function count(){ For(var counter=0;counter++){ Trace(counter);//显示0到10 } } Count(); Counter++; Trace(counter);//显示102
必须在脚本中声明变量,然后才能在表达式中使用它。如果使用未声明的变量(如下面示例所示), 该变量的值将是NaN或undefined,并且脚本可能产生意外的结果: Var squared=x﹡x; Trace(squared);//NaN Var x=6; 在下面的示例中,声明变量X的语句必须排在第一,这样squared就可以替换为一个值: Var x=6; Var squared=x﹡x; Trace(squared);//36 当用户将未定义的变量传递给方法或函数时,将出现类似的行为: GetURL(myWebSite);//无动作 VarmyWebSitehttp://www.macromedia.com”; VarmyWebSitehttp://www.macromedia.com GetURL(myWebSite);//浏览器显示www.macromedia.com 在一个脚本中,可以多次更改变量的值。变量包含的数据类型会影响如何以及何时更改变量,原始数据类型(例如字符串和数字)是按值进行传递的。这意味着变量的实际内容会传递给变量。 在下面的示例中,X设置为15,该值会复制到Y 中。在第三行中将X的值更改为30后,Y的值仍然为15,这是因为Y并不会参照X来改变它的值;它的值为在第二行中接收到的X的值。 Var x=15; Var y=x; Var x=30; 又例如,变量in Value包含一个原始值3,因此实际的值会传递给sprt()函数,而返回值为9: Function sprt(x){ Returnx﹡x; } varinValue=3 var out=sqrt(inValue); 变量inValue的值不会更改 对象数据类型可以包含大量复杂的信息,所以属于此类型的变量并不包含实际的值,它包含的是对值的引用。这种引用类似于指向变量内容的别名,当变量需要知道它的值时,该引用会查询内容,然后返回答案,而无需将该值传递给变量。 下面是按引用进行传递的实例: varmyArray=[“tom”,“josie”]; varnewArray=myArray; myArray [1]=“jack”; trace(newArray); 上面的代码创建了一个名为myArray的数组对象,它包含两个元素,然后创建了变量newArray,并向它传递了对myArray的引用。当myArray的第二个元素变化时,它将影响引用它的每个变量。Trace()动作会向“输出”面板发送tokm,jack. 在下面的示例中,myArray包含一个数组对象,因此它会按引用传递给函数zeroArray().zeroArray()函数会更改myArray中的数组的内容。 Function zeroArray(theArray){ Var I; For(i=0;i< theArray.;length;i++){ theArray[i]=0; } } Var myArray=newArray() myArray[0] =1 myArray[1]=2; myArray[2]=3; zeroArray(myArray); 函数zeroArray()会将数组对象作为参数来接受,并将该数组的所有元素设置为0.因为该数组是按引用进行传递的,所以该函数可以修改它。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|