龙图教育:AS3方法和技巧

2020-05-07 09:10

AS3方法和技巧

1.改变影片的帧频

2.类方法的作用域和类绑定 3.Graphics对象和绘图接口(API) 4.新的变量类型 5.显示对象 6.新的引入指令 7.唯一的类变量 8.新的鼠标移动事件

1. 改变影片的帧频

在AS3中,充许通过Stage类动态地改变影片的帧频.

每一个Sprite或者MovieClip实例都有一个stage属性,这个属性关联到一个Stage对象.可以通设置Stage对象的frameRate属性的值来调整影片播放时的帧频.frameRate值的大小范围为0.01至1000.

//改变帧频为12帧/s stage.frameRate=12;

2.类方法的作用域和类绑定

ActionScript 3 是完全基于类的,当你创建了一个类的时候,你也创建了与这个类相关的变量和函数(方法)以及类的实例,和ActionScript 2不同的是,ActionScript 3.0 中的方法类在的范围内调用. 即使函数被绑定给其它对象,然后通过这个对象调用函数,这个函数的调用范围仍然是函数所在的类,和Function.call和Function.applye用法一样.

package {

import flash.display.Sprite;

public class ClassScope extends Sprite { public function ClassScope() { traceThis(); // \var obj:Object = new Object(); obj.traceThis = traceThis;

obj.traceThis(); // \

traceThis.call(new Sprite()); // \}

public override function toString():String { return \}

public function traceThis():void { trace(this); } }

1

}

注:as2时代常用的Delegate可以不用了。更不用麻烦的使用下面的方法了,

var owner = this;

function clickHandler():Void {

//do something..

owner.someMethod(); }

3.Graphics对象和绘图接口(API)

和AS1和AS2一样,AS3也有一组绘图接口(drawing API),可以在影片(MC或者sprites)中动态地绘制矢量线条和图形.但在AS3中绘图接口不再像以前直接用于可见对象(Display Objects),而是单独定义为图形对象 (flash.display.Graphics). 图形对象拥有各种绘图方法用来在内部绘制图形。和以前相同的是,它被放置在目标对象的所有内容的下面,也就是说,在AS3中,你可以用新的函数更加方便的绘制矩形,圆形,甚至圆角矩形.这些函数包括:

drawCircle(x:Number, y:Number, radius:Number):void

drawEllipse(x:Number, y:Number, width:Number, height:Number):void drawRect(x:Number, y:Number, width:Number, height:Number):void drawRoundRect(x:Number, y:Number, width:Number, height:Number, ellipseWidth:Number,eHeight:Number):void

code:

//绘制一个蓝色的圆角矩形 var square:Sprite = new Sprite(); square.graphics.beginFill(0xFF0000);

square.graphics.drawRoundRect(0, 0, 100, 50, 10, 10); square.graphics.endFill(); addChild(square);

4.新的变量类型

as3 扩展了变量类型范围. 简单类型

Boolean int null Number String uint

2

undefined

复合类型

Object Array Date Error Function RegExp XML XMLList

另外还有一些分类到各个包中的诸如Matrix (flash.geom.Matrix), Shape (flash.display.Shape), URLRequest (flash.net.URLRequest),等等

一些提示 :Void 类型在 as3 中使用小写, Void改为 void

新增了万能类型 * 用来表示所有类型. 如果你没有为变量指定类型, 那么他即是默认类型var anyThing:*

XML 类型和 as1, 2 中的 XML不一样.通用的数据类型. as3 中的 XML 基于 E4X, 而不是象传统XML的解析接口一样, E4X使得XML成为通用的数据类型。E4X 简化操作XML将大大的减少相当 数量的代码以适用应用项目需要的发展。

新增 int 和 uint 简单类型来表示整数, 他们在数组遍历等不需要小数的场合相当有用. 在多数情况下int 类型会比使用 Number 快一点点, 而 uint 通常用来只用来表示颜值. 5.显示对象 (Display Object)

AS3中所有能在屏幕上看到的或者被添加到”显示列表”(display list)中对象组成了一个新的display objects的集合,它不仅仅包括以前AS的简单影片剪辑,按钮,和文本域这些对象,AS3还包括:

·AVM1Movie ·Bitmap ·Loader

·MorphShape* ·MovieClip ·Shape

·SimpleButton ·Sprite

·StaticText* ·TextField ·Video

后面加*的在时间轴上事先创建才能对它们操作,而且它们不能用AS直接创建.

AMV1Movie表示用AS1/2创建的影片,这些影片使用ActionScript Virtual Machine 1运行,而AS3影片用ActionScript Virtual Machine 2.AMV2也可以播放AVM1影片,但是AS3不能和AMV1

3

影片或者它们的脚本交互.

Bitmaps 位图对象.你可以用BitmapData对象来描绘图像,也可以用外部位图文件. Loader对象可以加载外部的图像或者SWF影片.

MorphShapes是时间线上创建的形状补间,尽管不能用AS创建MorphShapes,但是你可访问到时间轴上已经存在的MorphShapes.

MovieClips 还是以前那个你喜欢和了解的影片剪辑.

Shapes是被拆开的影片剪辑,它本质上只包括一个通过矢量绘图接口描绘图形的graphics对象.用Shapes来代替movieClips和sprites可以节约内存资源.Sprites本质上就是没有时间的影片剪辑.它是在AS3中最常用到的,你可以在自己的display object子类的时候继承它. StaticText和MorphShapes一样.不能用AS创建,只能手动创建. TextField包括动态文本和输入文本. Video 用来描述flash视频文件.

6.新的引入指令

AS3中的引人指令 和AS2有一点点的不同,在AS2中,import指令被单独用来表示定义在包中类的简写; 在使用类时不是必须用import指令的, 你完全可以仅仅直接使用类的全名来使用类.. code:

//ActionScript 2 此时可以不用import指令.

var myPoint:flash.geom.Point = new flash.geom.Point(0,0);

或者:

import flash.geom.Point;//此时用了import指令 var myPoint:Point=new Point(0,0);

在AS3中,访问类包中的类时,那怕是你使用了相关类的全名,也必须使用引入指令,当然不怕麻烦的话,你还可以像下面一样写了类的命名,也可以仅仅导入类的名称然后直接使用.但导入是必需的! code:

// ActionScript 3

import flash.geom.Point;

var myPoint:flash.geom.Point = new flash.geom.Point(0,0);

AS3中你同样可以像AS2一样用通配符(*)来导入一个包中的所有类.

import flash.geom.*;

相关资料: 类必须导入,即使是那些提及到类使用MyPackage.MyClass类,你必须导入MyPackage.*; 或者导入MyPackage.MyClass;这是必须的即使是那些提及到的类,列如使用全名MyPackage.MyClass。 在ActionScript 3.0中,被导入的文件表明你想使用来自于另一个

4

包的类,而在ActionScript 2.0中它只是一个简写。 在ActionScript 3.0中,完整的类名称用于消除模棱两可的情况,而且不会是导入文件方式的替代方式。

7.唯一的类量

在AS2中,类中定义的变量同时也被定义在类的prototype对象中.这样做虽然能很有效率的处理变量的定义,但是对于复杂的数据类型(例如数组)的定义来说有点问题,如果不在类的构造函数中为每个实例明确的定义,这些数据就可能会被”shared”,造成不便. AS3已经解决了这个问题,AS3中类中定义的变量对于每一个类的实例来说都是唯一的,所以这个问题不会发生了.

ActionScript Code:

class myClass{

private var list:Array = [1,2,3]; // bad for AS2, ok for AS3 public function myClass(){

// list should be defined here for AS2 } }

注:LUAR的一书中也提到了这个问题.P80 8.新的鼠标移动事件

在AS3中mouseMove事件有一点改变.以前,mouseMove事件不管鼠标在不在flash影片内,只要鼠标移动,Mouse对象或者MC的侦听器都会认为鼠标在移动并且接受这一事件.(MC不需要变为Mouse对象侦听器也可以动态接收鼠标事件).

而在AS3中,Mouse对象不再用来分派(dispatch)鼠标事件了.对于mouseMove事件,可以侦听Sprites,MovieClips和stage这些InteractiveObject实例获取,也就是AS3中使用InteractiveObject来侦听鼠标事件,不再是在Mouse对象上添加侦听器.mouseMove事件只有当鼠标从InteractiveObject实例的一个区域移动到它的另一个区域的时候才会调用,如果想让鼠标在影片的任何地方的移动都能被检测到,就需要侦听stage了.

当鼠标移动来拖动一个对象时,你需要使用stage来发送事件.因为如果用要拖动的对象做为事件发送器,当你的鼠标移出了拖动的对象,mouseMove事件就不在会被触发了,你的拖动也就停止了.

ActionScript Code:

stage.addEventListener(MouseEvent.MOUSE_MOVE,dragMyObject);

9. 类型转换和as运算符 10.delete关键词和类成员 11.Dictionary类 12.标签表达式

13.检测鼠标是否离开了影片

9.类型转换和as运算符

在必要的时候,AS充许把对象的类型转换为另一种合适的类型.不管是AS2还是AS3都支持使

5


龙图教育:AS3方法和技巧.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:深圳黑弧广告-员工手册

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: