现在的位置: 首页 > 综合 > 正文

ActionScript3-2复杂数据类型

2016年05月18日 ⁄ 综合 ⁄ 共 2976字 ⁄ 字号 评论关闭

一、 包与类

AS3中也有很多很多类,同样是使用包来管理。

在包里面放的并不全是 类, 也可以是 函数

AS3中,有些类和函数 并不在包里卖弄,这些 类和函数 被称为 顶级类和顶级函数

顶级:是指可以在任何位置使用的这些类和函数

一个小例子

var isFull:Boolean;

stage.addEventListener("click",onFull);

function onFull(e:MouseEvent)
{
	isFull = !isFull;
	
	if(isFull)
	{
			stage.displayState = "fullScreen";
	}else
	{
		stage.displayState = "normal";
	}
}

全屏与非全屏转换

new运算符

var obj:Object;
obj = new Object();

obj.name = "anders";
obj.age = 23;

trace(obj);
trace(obj.name);
trace(obj.age);

由于Object类是动态类,所以可以向obj实例  动态添加属性

数组;

//创建数组
var arr:Array = new Array();
//保存一个数字
arr[0] = 12;
//保存字符串
arr[1] = "helloo";
//保存boolean
arr[2] = true;
//保存一个MovieClip实例
arr[3] = new MovieClip();

trace(arr[0]);
trace(arr[1]);
trace(arr[2]);
trace(arr[3]);

输出:

12

hello

true

Objct

二、使用显示类

1 创建MovieClip类的实例

//创建MovieClip实例
var mc:MovieClip = new MovieClip();
//填充样式
mc.graphics.beginFill(0xFF9900,100);
//绘制矩形
mc.graphics.drawRect(0,0,100,200);
//添加到显示列表
addChild(mc);

2 用反射动态创建实例

在AS3中,所哟类都属于CLass类型,例如  Movieclip就是一个Class

eg

//动态得到类的构造函数
var classContructor:Class = MovieClip;
//创建相关类的实例
var mc:MovieClip = new classContructor();

mc.graphics.beginFill(0xFF9900,100);
mc.graphics.drawRect(0,0,100,100);
addChild(mc);

2 使用事件

mc.addEventListener("click",onClick);
function onClick(e:MouseEvent):void
{
	mc.x = mc.x + 5;
}

每次点击都会  将图像向右平移5个px

三、静态方法和静态属性

曾使用了很多Movieclip类的属性,这些属性都是通过影片剪切实例  或者额影片剪辑实例的实例名来访问的,这样的属性称为 实例属性。

还有一种属性,即  类属性 或 静态属性  这种属性只能通过类名来访问,不能通过实例来访问

1 Math类

Math类的属性,都属于类属性,只能通过类名来访问,

eg

Math.PI  就是 数学的 圆周率

2 事件类的 常量属性

例如AS3中的MouseEvent类,有很多属性,用来代表字符串常数

CLICK 表示字符串click  点击事件

DOUBLE_CLICK 表示字符串 doucleclick 双击事件

等等

所以上面的一段代码可以改写为:

stage.addEventListener(MouseEvent.CLICK,onClick);
function onClick(e:MouseEvent):void
{
	mc.x = mc.x + 5;
}

3 使用静态方法

String 类有个方法叫做frommCharCode()  它只属于类,只能通过类来使用,而String类的slice()方法属于实例,只能通过实例来使用。

四、垃圾回收

在flash中被称为垃圾回收机制,即用来自动清除内存中不需要的变量。

1 delete与静态类

在AS3中,delete发生了很大的变化,它不能杀出使用var定义的变量

var s:Number = 4;
delete s;

flash会报错。

但是delete只能删除动态创建的变量

如前面提到的MovieClip Object  Array类

//创建实例
var mc:MovieClip = new MovieClip();
//动态添加属性speed
mc.speed = 3;
//输出
trace(mc.speed);
//删除动态属性
delete mc.speed;
//再输出
trace(mc.speed);

输出结果为:

3
undefined

delete之后,输出为undefined,表示delete成功。

对于数组:

delete只能删除数组的元素,不饿能删除索引

//创建数组
var arr:Array = new Array();
//动态创建数组元素属性
arr[0] = 1;
arr[1] = "hello";
//输出 数组长度
trace(arr.length);
delete arr[1];
trace(arr[1]);
//输出 数组长度
trace(arr.length);

输出结果:

2
undefined
2

由此可以看出::

delete 只能删除数组的元素,不能删除索引。所以长度没变化

如果要真删除数组中的元素,要使用splice方法

五 类型检测与转换

1 typeof函数

AS3中有很多可以检测变量的方法,例如typeof函数返回代表数据类型的字符串

var number:Number = 3;
trace(typeof(number));

var str:String = "hello";
trace(typeof(str));

var uint_var:uint = 3;
trace(typeof(uint_var));

var obj:Object = new Object();
trace(typeof(obj));

var any:* = new Object();
trace(typeof(any));

结果输出:

number
string
number
object
object

2 is运算符与继承链

如果要检测变量的准确数据类型,可以使用is运算符,is用来判断实例是否属于某类型,也可以判断类的继承关系,包括对于借口的继承执行。返回值为true  false

var mc:MovieClip = new MovieClip();

trace(mc is MovieClip);
trace(mc is Sprite);
trace(mc is DisplayObject);
trace(mc is Stage);

输出:

true
true
true
false

其中:MovieClip继承了Sprite类,Sprite继承了DisplayObject类。

3 类型转换函数与as运算符

在复杂类型的变量之间赋值时,子类给直接或间接的父类赋值,会自动进行类型转换。

强制类型转换与as

var mc1:MovieClip = new MovieClip();
var mc2:Sprite = new MovieClip();
mc1 = MovieClip(mc2);

mc1 = mc1 as MovieClip;

这样都能强转

区别:

as如果转换不成功会返回一null。

而强转不成功的话flash会报错

抱歉!评论已关闭.