AS3.0 类的编写(不使用库元件)
在上一讲中我们使用的是已创建好的影片剪辑,并在库中做类的链接,这对有复杂图形的创作是比较好的选择,如果你能熟练的应用绘图API绘制出你想要的任意图形,就可以不使用库元件,直接在类中编写。下面我们用这种方式编写类代码:
创建一个DocumentClass类(创建100个随机摆放的圆)
1.代码:
2.
3.package {
4.
5.import flash.display.MovieClip;
6.public class DocumentClass extends MovieClip {
7.// 属性
8.private var _circle:Drag_circle;
9.private const maxBalls:int = 100;
10.// 构造函数
11.public function DocumentClass() {
12.
13.var i:int;
14.// 循环创建小球
15.for(i = 0; i<= maxBalls; i++) {
16.// 创建可拖动小球的实例
17._circle = new Drag_circle();
18.// 设置小球实例的一些属性
19._circle.scaleY = _circle.scaleX = Math.random();
20.// 场景中的x,y位置
21._circle.x = Math.round(Math.random() *(stage.stageWidth - _circle.width));
22._circle.y = Math.round(Math.random() *(stage.stageHeight - _circle.height));
23.// 在场景上显示
24.addChild(_circle);
25.}
26.}
27.}
28.}
Drag_circle类 (绘制一个红色的圆,有拖拽功能)
1.代码:
2.
3.package {
4.
5.import flash.display.Sprite;
6.import flash.display.Shape;
7.import flash.events.MouseEvent;
8.
9.public class Drag_circle extends Sprite {
10.
11.private var _circle:Sprite;
12.
13.public function Drag_circle() {
14.
15._circle = new Sprite();
16._circle.graphics.beginFill(0xff0000);
17._circle.graphics.drawCircle(0, 0, 10);
18._circle.graphics.endFill();
19._circle.buttonMode = true;
20.addChild(_circle);
21.
22.
23._circle.addEventListener(MouseEvent.CLICK,onClick);
24._circle.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
25._circle.addEventListener(MouseEvent.MOUSE_UP,onUp);
26.
27.}
28.
29.
30.private function onClick(event:MouseEvent):void {
31.trace("circle clicked");
32.}
33.
34.private function onDown(event:MouseEvent):void {
35._circle.startDrag();
36.}
37.
38.private function onUp(event:MouseEvent):void {
39._circle.stopDrag();
40.}
41.}
42.}
新建一个fla文件,保存在Document.as和Drag_class.as类同一目录中。注意:与上回讲的元件类不同在于,不再需要让场景中有任何内容,因为我们已在主类DocumentClass.as中动态的添加和显示了circle_mc。在属性面板中的文档类输入框中输入类名 DocumentClass,就可以测试了。(你可以尝试着给小球加入随机颜色或渐变颜色)