第二章 actionscript3.0简单数据类型

2012-01-18 14:07  评论 0 条

第一部分, actionscript3.0基础

整个基础部分参照《actionscript3.0从入门到精通》框架编写,
但做了大幅度的修改精简和调整,更简洁易懂。

 第一章 FLASH网站创意到技术全解析第一章 了解actionscript3.0

第二章 简单数据类型

2.1数据类型
 一般来说衣柜是放衣服的,冰箱是放食物的。不会把衣服在冰箱里。同样变量也是有类型的,这种类型称为数据类型。
保存数字的变量类型为Number类型,保存字符串的变量类型String类型,定义变量时申明数据类型的形式为:
var speed:Nunber;
第一章提到的变量stage的类型为Stage类型,即类也是一种数据类型。当通过【属性】面板定义变量时候,变量类型也被自动申明了。
Actionscript3.0的数据类型分为简单数据类型和复杂数据类型两大类,简单数据类型只是表示简单的值,是在最低抽象层存储的值,运算速度相对较快。前面提到的字符串和数字都是简单数据。
 

2.1-1简单数据类型
其中,int类型,uint类型和Number类型表示数字类型。String类型表示字符串类型,Boolean类型表示布尔值类型,布尔值只能使tr和false。所以简单数据类型的变量只有3种,即数字、字符串和布尔值。

2.2 int类型和int类
int类型表示整数。是一个32位有符号的整数型数据类型,其有效值范围为-2147483648到2147483648。在int类中有两个常数表示int类型变量取值的最大值和最小值。
常数 MAX_VAL  int数据类型的变量的最大值
常数 MIN_VAL   int数据类型的变量的最小值
例如:
trace(“最大值=”+int. MAX_VAL,“最小值=”+int. MIX_VAL);
可以看到输出的信息如下:
最大值=2147483648   最小值=-2147483648
如果尝试给int类型变量赋值小数,FLASH将自动取小数的整数部分,再将这个整数赋值给int类型变量。
例如:
var webexea:int=3.54;
tarce(“webexea=”+webexea);
var webexeb:int=2.14
tarce(“webexeb=”+webexeb);
输出的结果为:
webexea=3
webexeb=2
从输出结果可以看出,小数部分被忽略了。所以进行浮点运算时要特别小心。假设一个整数位6789,要取这个整数的4个位数,即6,7,8,9。通过int类型变量可实现这个功能。
//定义数字
var num:int=6789;
//取得字数的复制
var temp:int=num;
//得到千位数
var a:int=temp/1000;
//去掉千位数
temp=temp-a*1000;
//得到百位数
var b:int=temp/100;
//去百千位数
temp=temp-b*100;
//得到十位数
var c:int=temp/10;
//去十千位数
temp= temp-c*10;
//得到个位数
var d:int=temp;
tarce(a,b,c,d);
测试影片输出结果6 7 8 9
程序中得到数位的思路很简单,只利用了int类型是整数的特点。例如,temp/1000等于6.789,由于变量a是int类型,所以只取整数部分。
上面程序使用的“-”表示减运算符,可以对数字进行减法运算;“/”表示除运算符,对数字进行除法运算;“*”表示乘法运算符,可以进行乘法运算。

2.3 uint类型和uint类
uint类型和int类型与Number类型合称为数值类型。uint类型表示无符号32位整数,即非负数。uint类型主要用于表现像素颜色和其它一些int所不能很好工作的领域,有效值范围为0~4294967295。
FLASH的颜色常用#FF9900或0XFF9900表示颜色值就是一种最常用的uint类型。
另外在FLASH游戏中,经常会用到键控代码,键控代码肯定是一个正整数,因此申明一个变量表示键控代码时,应申明为uint类型。由于键控代码是不会变的常量,申明常量使用const关键字。
例如:
const KAY_A:uint =65;
int类和uint类型都属于Number类型。但从理论上来讲FLASH处理Number类型速度稍微慢点。

2.4 Number类型和Nnunber类
数字类型的变量值可以是正数或者负数,也可以是整数和小数。
Number类型可以进行浮点运算,但也会给编程带来一些问题。在数学中,“0.1+0.2”的值是0.3,在编程中呢?我们看下面的例子:
trace(0.1+0.2);
//结果为0.3
结果为0.3,但是当我们比较“0.1+0.2==0.3”时结果是flase。可以通过下面代码来探究原因:
trace(0.1+0.2==0.3);
//结果是flase
trace(0.1+0.2-0.3);
//结果是5.55111512312578e-17,相差大约5乘10的-17次方。
FLASH里面的浮点运算总会出现误差,能用整数的地方用整数。实在要用浮点运算,千万不能用“==”判断两个数是否相等。如果是循环多用大于,小于。
“=”与“==”是完全不同的,“=”是赋值运算符号。而“==”是比较运算符。

2.5 Boolean类型和Boolean类
在游戏中,鼠标与游戏角色的位置关系之有两种,要么鼠标在游戏角色内,要么在角色外。像这种非此即彼的数据用Boolean类型表示。Boolean类型的变量的取值用tr或false表示,tr或false也称为布尔值。
FLASH对Boolean类型进行处理时,会把tr转换为1,把false转换为0。
var webexe: Boolean=false;
trace(webexe==0);
//输出结果为tr,证明false确实转换为0了。

2.6 String类型与String类
由双引号或单引号括起来的都可以看成是字符串,字符串的数据类型属于Sting类型,每个Sting类型的变量都拥有Sting类的属性和方法。在使用单引号或者双引号时,必须成对地出现在字符串首尾。其中双引号表示字符串,单引号表示字符。
var webexe:Sting=’my name is”webexe”’;
String类有个名为length的属性,可以获取字符串的长度,及字符的个数。
var myname:String=“zjs35”;
trace(myname.length);
//结果为5,代表字符的个数。
除此之外Sting类含有很多方法,当定义一个Sting类型的变量后,就可以用点语法来访问Sting类的这些方法,例如:
//定义表示字符串变量
var webexe: Sting=”zjs35”;
//取得索引为1的字符
trace(webexe.charAt(1));
//取得索引为1的字符的Unicode代码
trace(webexe.charCodeAt(1));
//把字符串zjs35与flash链接成新的字符串
trace(webexe.concat(“_flash”));
//根据Unicode代码返回字符
trace(Sting.fromCharCode(106));
输出的结果为:
j
106
zjs35_flash
j
上面列出了1个静态方法和3个非静态方法,静态方法之能通过类名(即String)来访问。而非静态方法必须通过变量来访问。
上面的代码中,提到Unicode编码,Unicode给每个字符提供了一个唯一的数字。因为计算机只是处理数字,计算机指定一个数字来储存字母或其它字符。例如,字符j的Unicode代码为106。
操作字符串有时候比操作数字更加方便简单,下面是操作字符串来实现取位数的另一种方法。
//定义数字
var num:int=6789;
//数字转换为字符串
var webexe= Sting(num);
//取得索引0处的字符,即6
var a:int=webexe. charAt(0);
//取得索引1处的字符,即7
var b:int=webexe. charAt(1);
//取得索引2处的字符,即8
var c:int=webexe. charAt(2);
//取得索引3处的字符,即
var d:int=webexe. charAt(3);
//输出位数
trace(a,b,c,d);
//结果为6,7,8,9
代码中所用的Sting函数能把其他类型的数据转换为字符串,charAt()方法可取得指定索引的字符,然后把字符赋值给int类型的变量。在赋值过程中,实际上先把字符转换为数字,再赋值给变量。因为int类型的变量是不能储存String类型数据的。
在处理字符串时,有些字符时不能直接在字符串中输入的,需要使用转义符。例如:
转义序列                           转义结果
b                                      Backspace字符(ASCII 8)
f                                      走纸换页字符(ASCII 12)
n                                     换行字符(ASCII 10)
r                                      回车自负(ASCII 13)
t                                      制表符(Tab)(ASCII 9)
"                                      双引号
'                                      单引号
\                                      反斜线符号()
00~377                          一个用8进制指定的字符(占一个字节)
x00~xFF                          一个用16进制指定的字符(占一个字节)
~?                    一个用16进制指定的Unicode字符(占两个字符)
当然,也可以使用fromCharCode()方法来插入一些特殊字符,但书写较为麻烦。例如换行符的Unicode编码为10,例子如下:
trace(“zjs”+String.fromCharCode(10)+”35”);

2.7 变量的命名规则
变量名称是标识符。标示符是用于表示变量,属性,对象,函数,或方法的名称。它的第一个字符必须是字母,下划线_和美元符号$。其后的字母必须是字母,数字下划线和美元符号。
在ActionScript1.0和ActionScript2.0中,可以用同一个变量名重复定义变量,在ActionScript3.0中,这是不允许的。例如:
const MAX_VAL=100;
for(var i=0;i< MAX_VAL;i++)
{
//code1
}
//code2
for(var i=0;i< MAX_VAL;i++)
{
//code3
}
上面代码ActionScript1.0和ActionScript2.0中,可以运行。ActionScript3.0中将不能正常工作。正确写法因该先定义i,然后再不同的位置使用它。如下:
const MAX_VAL:Number=100;
var i:int;
for( i=0;i< MAX_VAL;i++)
{
//code1
}
//code2
for(i=0;i< MAX_VAL;i++)
{
//code3
}
另外,在基于时间轴的编程中,如果再第一帧中定义一个变量,然后又在后面的帧中定义一个同名的变量,ActionScript3.0也会作为“重复定义变量”处理。解决方法很简单,就是在程序的开头先定义变量,然后再不同的地方就可以使用这个变量了。
另外,MovieClip的属性名和方法名以及FLASH的关键字是不能用来作为变量名的。
另外注意,FLASH的变量名是区分大小写的,webexe和weBexe是不一样的变量。

本文地址:http://blog.zd178.com/?p=653
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!
新年快乐
新年快乐

发表评论


表情