在声明了包与类并且导入了相关的类之后,我定义了一些在程序中会用到的常量,(注:这段程序会在一个shape内绘制内容,然后会复制几个shape并让他旋转一定角度,作者把这些shape称为段(segment),把我弄得晕晕的,总让我想起汇编的segment ) INIT_SEGMENTS是开始时围绕所绘制的线条旋转的段的个数,MAX_SEGEMNTS和MIN_SEGMENTS 就是最大值与最小值了, THICKNESS与COLOR用来定义线条的外观,最后,ROTATION_RATE用来控制当你绘制的时候,shape旋转得多快。
随后的一些属性用来保持程序中创建的shape和Sprite的引用, _shapeHolder是一个大容器,所有的shape添加在他里面,他会在你鼠标绘制的时候旋转, _shapes向量数组存贮所有创建的shape实例。
引用:
ActionScript3.0中的Vector类型是Flash Player10新增的内容,是一个与Array相似的数据结构,可以使用任何你知道的有关数组的方法操作,但是有一套更为严格的规则,最明显的是 Vector在创建的时候需要指定一个参数类型,并且它只接受指定参数类型的数据,如下面的一句代码:
var sprites:Vector.<Sprite> = new Vector.<Sprite>();
你只能把Sprite类的实例放入数组,不像Array一样你可以放任何类型的数据,这样做最大的好处就是任何被添加到Vector里的数据你都明确知道它的类型,并不需要从Object类型转换,从Vector里取出来的数据并不需要做类型检查。
var sprite:Sprite = sprites.pop()
如果你试图在一个Array类型上这么错,编译器会抛出一个错误,Vector让代码更加干净,执行速度更快。
在类构造器内,我只是调用了init()方法。通常,当我需要超过两到三行代码来初始化程序的时候,我会把它们放在一个名为init的方法内,然后在构造器中调用。
init方法内我做的第一件事是创建_shapeHolder,把他定位在舞台的中间并且添加到显示列表。
代码:
_shapeHolder = new Sprite(); _shapeHolder.x = stage.stageWidth / 2; _shapeHolder.y = stage.stageHeight / 2; addChild(_shapeHolder);
然后我初始化_shapes向量数组,用一个循环调用addSegment()方法创建所有的段。addSegment()方法是用来添加一个段到 _shapeHolder容器的。
循环结束后调用positionSegment()方法来围绕中心旋转所有的段。
代码:
_shapes = new Vector.<Shape>(); for (var i:int = 0; i < INIT_SEGMENTS; i++ ) { addSegment(); } positionSegments();
现在我们来看看addSegment()方法。
代码:
var shape:Shape = new Shape(); if (_shapes.length > 0) { shape.graphics.copyFrom(_shapes[0].graphics); } else { shape.graphics.lineStyle(THICKNESS, COLOR); } _shapes.push(shape); _shapeHolder.addChild(shape);
创建一个新的Shape实例之后,我检查一下他是不是第一个被创建的,如果不是第一个我要用来绘图的shape,我调用神奇的copyFrom()方法,这会把我在第一个shape中绘制的所有的内容复制到现在的shape,如果是第一个shape,我就调用 lineStyle()方法定义绘制的线条样式,最后,我把新创建的shape添加到_shapes数组同时添加进_shapesHolder容器。
出处:蓝色理想
责任编辑:bluehearts
上一页 ActionScript3.0 Image Effects 复制图形 [2] 下一页 ActionScript3.0 Image Effects 复制图形 [4]
◎进入论坛RIA设计与应用版块参加讨论
|