ActionScript 3 Cookbook 6.4创建自定义可视化对象
问题:
如果你想创建一个新类型的显示对象怎么办?
解决办法:
创建一个新的类,让其继承 DisplayObject类或者是他的子类
然后用addChild( )和addChildAt( )将其加入显示对象列表
讨论:
过去只能继承MovieClip对象创建可视化对象,而且不得不在库中的MovieClip中设置标志链接
然后用attacheMovie方法来创建,不能完全用as脚本创建。但是现在你可以完全用as来创建
,你要首先决定你要创建的对象类型,如果你要创建一个用户自定义图形,你就用继承shape类
来做,如果要创建用户自定义按钮,你可以继承SimpleButton类
如果你要创建一个容器去控制显示其他对象,而且不需要时间轴,那么sprite类是个好的选择,
如果你需要时间轴,那就用sprite的子类MovieClip
所有的显示对象的类都是针对明确的目标而创建的,你最好构思好你想创建的可视化类的服务操作是什么
,然后选择适当的父类继承,选择的过程要考虑优化swf的大小和资源管理问题。比如:你要创建一个简单的圆圈图形
类,由于不需要时间轴,所以没有必要用MovieClip类,shape类是个更好的选择。
一旦基础类被确定了,那么所有其余的工作就是在这个类中写代码了,下面是个简单的例子
脚本是继承shape类创建圆圈的,文件名称Circle.as
package {
import flash.display.Shape;
//这个Circle类是自定义的可视化类
public class Circle extends Shape {
//定义本地变量存储圈的属性
private var _color:uint;
private var _radius:Number;
/*
*构造函数:创建一个圆圈默认颜色黑色,默认半径10
*/
public function Circle( color:uint = 0x000000, radius:Number = 10 ) {
// 存储颜色和半径值
_color = color;
_radius = radius;
// 当圆圈创建时自动画出来
draw( );
}
/*
* 基于指定的颜色和半径画圈
*/
private function draw( ):void {
graphics.beginFill( _color );
graphics.drawCircle( 0, 0, _radius );
graphics.endFill( );
}
}
}
上面是创建新的显示对象Circle
如果要显示在屏幕上要用,addChild()和addChildAt()把实例化的对象加入显示对象列表中。如下:
package {
import flash.display.Sprite;
public class UsingCircleExample extends Sprite {
public function UsingCircleExample( ) {
var red:Circle = new Circle( 0xFF0000, 10 );
red.x = 10;
red.y = 20;
var green:Circle = new Circle( 0x00FF00, 10 );
green.x = 15;
green.y = 25;
var blue:Circle = new Circle( 0x0000FF, 10 );
blue.x = 20;
blue.y = 20;
addChild( red );
addChild( green );
addChild( blue );
}
}