九 处理事件
1
大 多数 SWF 文件都支持某些类型的用户交互,无论是像响应鼠标单击这样简单的用户交互,还是像接受和处理
表 单中输入的数据这样复杂的用户交互。与 SWF 文件进行的任何此类用户交互都可以视为事件。也可能会在
没有任 何直接用户交互的情况下发生事件,例如,从服务器加载完数据。
2 编写时间侦听器代码
function
eventResponse(
eventObject:
EventType):void
{
// 此处是为响应事件而执行的动作。
}
eventTarget.addEventListener(
EventType.
EVENT_NAME,
eventResponse);
具体的解释手册上面有 这里面的
EventType.
EVENT_NAME就是函数中
eventObject这个参数,其就是事件对象
3 默认行为 : 开发人员通常负责编写响应事件的代码。但在某些情况下,行为通常与某一事件关联,使得 Flash
Player 会自动执行该行为,除非开发人员添加了取消该行为的代码。由于 Flash Player 会自动表现该行为,因此
这类行为称为默认行为。
4 事件对象
为方便对这些属性和方法的访问,Flash Player API 定义了一个 Event 类,作为所有事件对象的基类。Event 类定义一组基本的适用于所有事件对象的属性和方法。
5 事件对象类型使用常量而不是字符串有利于检查拼写的错误
6 事件侦听器:事件侦听器也称为事件处理函数,是flash player为响应特定事件而执行的函数,添加事件侦听器的过程分为两个步骤,a 创建一个为响应事件而执行的类或函数称为创建侦听函数。b 使用
addEventListener()方法注册侦听器函数
7 创建侦听器函数在手册上面有例子
a 在类外部定义的侦听器函数
请注意,事件对象作为参数传递到
clickHandler()
。这就允许您的侦听器函数检查事件对象。在该示例中,使用事件对象的
type
属性来确定该事件是否为单击事件。
该示例还检查
this
关键字的值。在本例中,
this
表示全局对象,这是因为函数是在任何自定义类或对象外部定义的。
b 定义为类方法的侦听器函数
请注意,
this
关键字引用名为
child
的 ChildSprite 实例。请注意,
this
关键字引用名为
child
的 ChildSprite 实例。
这是创建矩形的三个组合
graphics.beginFill(0xFF0000);
graphics.drawRect(0,0,100,100);
graphics.endFill();
8 管理事件侦听器
使用 IEventDispatcher 接口的方法来管理侦听器函数。该接口含有五个方法,看手册
Flash Player API 使用 EventDispatcher 类来实现 IEventDispatcher 接口,该类用作可以是事件目标或事件流一部分的所有类的基类。例如,DisplayObject 类继承自 EventDispatcher 类。这意味着,显示列表中的所有对象都可以访问 IEventDispatcher 接口的方法。
9 添加事件侦听器
addEventListener()
方法是 IEventDispatcher 接口的主要函数。使用它来注册侦听器函数。两个必需的参数是 type
和 listener
。type
参数用于指定事件的类型。listener
参数用于指定发生事件时将执行的侦听器函数。listener
参数可以是对函数或类方法的引用。
priority
参数 设置该事件侦听器的优先级,对于具有相同优先级的事件侦听器,则按它们的添加顺序执行,因此将优先执行较早添加的侦听器。
useWeakReference
参数 对于不再需要的侦听器设置为true是删除,设置为false默认值不会删除
10 删除事件侦听器
必需的参数包括
eventName
和
listener
参数,这与
addEventListener()
方法所需的参数相同。需要使用两次,第一次调用时将
useCapture
设置为
true
,第二次调用时将其设置为
false
。
11 调度事件
高级程序员可以使用
dispatchEvent()
方法将自定义事件对象调度到事件流。
12 检查现有的事件侦听器
IEventDispatcher 接口的最后两个方法提供有关是否存在事件侦听器的有用信息。如果在特定显示列表对象上发现特定事件类型的事件侦听器,
hasEventListener()
方法将返回
true
。如果发现特定显示列表对象的侦听器,
willTrigger()
方法也会返回
true
。但
willTrigger()
不但检查该显示对象上的侦听器,还会检查该显示列表对象在事件流所有阶段中的所有父级上的侦听器。
第十章处理XML没有看
第十一章显示编程
1显示编程简介
使用 ActionScript 3.0 构建的每个应用程序都有一个由显示对象构成的层次结构,这个结构称为"显示列表"。显示列表包含应用程序中的所有可视元素。显示元素属于下列一个或多个组:见手册
舞台
舞 台是包括显示对象的基础容器。每个应用程序都有一个 Stage 对象,其中包含所有的屏幕显示对象。舞台是顶级容器,它位于显示列表层次结构的顶部,基础容器就是可视化对象的平台,所有的效果都是显示在基础容器上面 的,就好像是一张纸上面画一个图形,这张纸就是基础容器
每个 SWF 文件都有一个关联的 ActionScript 类,称为"SWF 文件的主类"。当 Flash Player 在 HTML 页中打开 SWF 文件时,Flash Player 将调用该类的构造函数,所创建的实例(始终是一种显示对象)将添加为 Stage 对象的子级。SWF 文件的主类始终扩展 Sprite 类(有关详细信息,请参阅
显示列表方法的优点)。
可以通过任何 DisplayObject 实例的
stage
属性来访问舞台。有关详细信息,请参阅
设置舞台属性。
显示对象
在 ActionScript 3.0 中,在应用程序屏幕上出现的所有元素都属于"显示对象"类型。flash.display 包中包括的 DisplayObject 类是由许多其它类扩展的基类。这些不同的类表示一些不同类型的显示对象,如矢量形状、影片剪辑和文本字段等。有关这些类的概述,请参阅显示列表方法的优点。
显示对象容器
显示对象容器是一些特殊类型的显示对象,这些显示对象除了有自己的可视表示形式之外,还可以包含也是显示对象的子对象,所有显示对象的类是Display Object类的子类
2 常见的显示编程任务 见手册
3 重要的概念及术语 见手册 如 SWF 文件的主类 矢量图形 舞台
4 显示核心类 Display Object类和所有的继承类图示 和其功能作用 见手册
扩展 DisplayObject 类的所有类都继承该类的方法和属性。有关详细信息,请参阅
DisplayObject 类的属性和方法。
MorphShape ─ 这些对象是在 Flash 创作工具中创建补间形状时创建的
5 显示列表方法的优点
- 呈现方式更为有效且减少了内存使用
- 改进了深度管理
- 完整遍历显示列表
- 列表外的显示对象
- 更便于创建显示对象的子类
手册中有相关的介绍
6 处理显示对象 DisplayObject类的属性和方法
所有显示对象都是 DisplayObject 类的子类,同样它们还会继承 DisplayObject 类的属性和方法。继承的属性是适用于所有显示对象的基本属性。例如,每个显示对象都有
x
属性和
y
属性,用于指定对象在显示对象容器中的位置。
您不能使用 DisplayObject 类构造函数来创建 DisplayObject 实例。必须创建另一种对象,才能使用
new
运算符来实例化对象。 7 在显示列表中添加显示对象 手册上都要看
8 如果改变显示对象容器即DisplayObjectContainer,则里面的显示对象就会有相应的改变,要使某一显示对象出现在显示列表中,必须将该显示对象添加到显示列表上的显示对象容器中。使用容器对象的
addChild()
方法或
addChildAt()
方法可执行此操作。例如,如果下面的代码没有最后一行,将不会显示
myTextField
对象:
var myTextField:TextField = new TextField();
myTextField.text = "hello";
this.root.addChild(myTextField);
在此代码范例中,this.root
指向包含该代码的 MovieClip 显示对象容器。在实际代码中,可以指定其它容器
9 以下具体的解释参考手册
使用
addChildAt()
方法可将子级添加到显示对象容器的子级列表中的特定位置。
使用
addChildAt()
方法可以调整这些显示对象在容器中的分层。
可以使用
getChildAt()
方法来验证显示对象的图层顺序。
如果从父容器的子级列表中删除了一个显示对象,则列表中位置较高的每一个元素在子索引中会分别下移一个位置。
removeChild()
和
removeChildAt()
方法并不完全删除显示对象实例。这两种方法只是从容器的子级列表中删除显示对象实例。该实例仍可由另一个变量引用。(请使用
delete
运算符完全删除对象。)
由于显示对象只有一个父容器,因此只能在一个显示对象容器中添加显示对象的实例。如果将在第一个显示对象容器中包含的某一显示对象添加到另一个显示对象容器中,则会从第一个显示对象容器的子级列表中删除该显示对象。
10 除了上面介绍的方法之外,DisplayObjectContainer 类还定义了用于处理子显示对象的几个方法
-
contains()
:确定显示对象是否是 DisplayObjectContainer 的子级。
-
getChildByName()
:按名称检索显示对象。
-
getChildIndex()
:返回显示对象的索引位置。
-
setChildIndex()
:更改子显示对象的位置。
-
swapChildren()
:交换两个显示对象的前后顺序。
-
swapChildrenAt()
:交换两个显示对象的前后顺序(由其索引值指定)。
11 DisplayObjectContainer 类包括通过显示对象容器的子级列表遍历显示列表的属性和方法
getChildAt()
方法返回显示列表中特定索引位置的子级:
trace(container.getChildAt(0) is TextField); // true
与使用
getChildAt()
方法相比,使用
getChildByName()
方法会导致性能降低。
12 设置舞台属性
Stage 类用于覆盖 DisplayObject 类的大多数属性和方法。如果调用其中一个已覆盖的属性或方法,Flash Player 会引发异常。例如,Stage 对象不具有
x
或
y
属性,因为作为应用程序的主容器,该对象的位置是固定的,也就是说舞台的位置是固定的,是最外围的容器。
x
和
y
属性是指显示对象相对于其容器的位置,由于舞台没有包含在其它显示对象容器中,因此这些属性不适用。
控制回放帧数率 Stage 类的
framerate
属性用于设置加载到应用程序中的所有 SWF 文件的帧速率。
控制舞台缩放比例 当调整 Flash Player 屏幕的大小时,Flash Player 会自动调整舞台内容来加以补偿。Stage 类的 scaleMode 属性可确定如何调整舞台内容。此属性可以设置为四个不同值,如 flash.display.StageScaleMode 类中的常量所定义。
对于 scaleMode 的三个值(StageScaleMode.EXACT_FIT、StageScaleMode.SHOW_ALL 和 StageScaleMode.NO_BORDER),Flash Player 将缩放舞台的内容以容纳在舞台边界内。三个选项在确定如何完成缩放时是不相同的。
* StageScaleMode.EXACT_FIT 按比例缩放 SWF。
* StageScaleMode.SHOW_ALL 确定是否显示边框(就像在标准电视上观看宽屏电影时显示的黑条)。
* StageScaleMode.NO_BORDER 确定是否可以部分裁切内容。
如果将 scaleMode 设置为 StageScaleMode.NO_SCALE,则当查看者调整 Flash Player 窗口大小时,舞台内容将保持定义的大小。当 scaleMode 设置为 StageScaleMode.NO_SCALE 并且调整了 SWF 文件大小时,将调度 Stage 类的 resize 事件,允许您进行相应地调整。
将 scaleMode 设置为 StageScaleMode.NO_SCALE 可以更好地控制如何根据需要调整屏幕内容以适合窗口大小。例子参见手册
处理全屏模式 Stage 类的 displayState 属性用于切换 SWF 的全屏模式。可以将 displayState 属性设置为由 flash.display.StageDisplayState 类中的常量定义的其中一个值。要打开全屏模式,请将 displayState 设置为 StageDisplayState.FULL_SCREEN:mySprite.stage.displayState = StageDisplayState.FULL_SCREEN;
要退出全屏模式,请将 displayState 属性设置为 StageDisplayState.NORMAL
mySprite.stage.displayState = StageDisplayState.NORMAL;
全屏模式的舞台缩放行为与正常模式下的相同;缩放比例由 Stage 类的 scaleMode 属性控制。通常,如果将 scaleMode 属性设置为 StageScaleMode.NO_SCALE,则 Stage 的 stageWidth 和 stageHeight 属性将发生更改,以反映由 SWF 占用的屏幕区域的大小
打开或关闭全屏模式时,可以使用 Stage 类的 fullScreen 事件来检测和响应。例如,进入或退出全屏模式时,您可能需要重新定位、添加或删除屏幕中的项目,手册上面有例子
在 ActionScript 中处理全屏模式时,需要记住注意事项: 手册上面
处理显示对象的事件 参见手册
选择DisplayObject子类 如果有多个可供选择的选项,处理显示对象时要作出的一个重要决策是:每个显示对象的用途是什么。手册上的原则可以帮助您作出决策。
改变位置
坐标原点位于舞台的左上角,从原点开始x轴的值想有为正,向左为负,y轴向上为负,向下为正,默认的情况下建立的对象为原点
改变相对于舞台的位置
一定要记住x,y是指显示对象相对于其父显示对象坐标轴的0,0坐标位置,使用this.addChild的都是相对于舞台,mysprite.addChild是相对于mysprite这个对象的
同样,可以使用 DisplayObject 类的 localToGlobal()
方法将本地坐标转换为舞台坐标。例子
var stagePoint:Point = new Point(0, 0);
var targetPoint:Point = mySprite.globalToLocal(stagePoint);
circle.x = targetPoint.x;
circle.y = targetPoint.y;
具体的例子参见手册
创建拖放交互组件
主要是使用事件侦听器和startDrag( );和stopDrag( );例子在手册的联系里面的startDrag.fla
解决拖放多个实例和覆盖问题的实例在startDrag1.fla中 还会有滤镜效果参见滤镜显示对象
平移或滚动显示图像
用 显示对象的 scrollRect 属性时,最好指定 Flash Player 应使用 cacheAsBitmap 属性将显示对象的内容作为位图来缓存。如果这样做了,每次滚动显示对象时,Flash Player 就不必重绘显示对象的整个内容,而可以改为使用缓存的位图将所需部分直接呈现到屏幕上。bigText.cacheAsBitmap = true;
例子见scrollRect.fla
处理大小和缩放对象
square.width = 420; square.height = 420;
circle.width = 100; circle.height = 75; trace(circle.scaleX);// 输出:0.6622516556291391 trace(circle.scaleY);// 输出:0.4966887417218543
// 直接更改宽度。
square.width = 150;
// 更改垂直缩放以匹配水平缩放,
// 使大小成比例。
square.scaleY = square.scaleX;
控制缩放时的扭曲
使用9切片的方法
myButton.scale9Grid = new Rectangle(30, 20, 90, 40); 这里面的参数是按比例的muButton为150*80 具体含义手册上有
myButton.scaleX=2.5;
缓存显示对象和应用混合模式 没有看
调整 DisplayObject 颜色
每个显示对象都有 transform 属性,包含有关应用到显示对象的各种变形的信息(如旋转、缩放或位置的更改等)。
Transform 类还包括 colorTransform 属性,它是 ColorTransform 类的实例
要访问显示对象的颜色转换信息,可以使用如下代码:
var colorInfo:ColorTransform = myDisplayObject.transform.colorTransform;
转化后必须将 ColorTransform 实例重新分配给 transform.colorTransform 属性。
myDisplayObject.transform.colorTransform = colorInfo;// 提交更改。
使用代码设置颜色值 实例见手册
使用代码更改颜色和亮度效果
记住ColorTransform类中的一些属性,及其设置 实例参见手册
旋转对象
rotation属性 square.rotation = 45;
淡化对象
alpha 属性 实例参见手册
遮罩显示对象
第一遮罩 mySprite.mask = maskSprite; 具体的谁包含谁参看手册上面的实例
删除 mySprite 中的遮罩 mySprite.mask = null;
Alpha 通道遮罩 渐变椭圆(中心为纯黑色,边缘淡变为透明)绘制在图像上;这就是 Alpha 遮罩。另外两个对象必须打开位图缓存即loader.cacheAsBitmap = true;
如果是创建单个图形的话as比flash工具建立swf文件的要大
对象动画
动画是使内容移动或者使内容随时间发生变化的过程。让脚本动画与 SWF 文件的帧速率同步,每个显示对象都有enterFrame 事件,它根据 SWF 文件的帧速率来调度,即每帧一个事件。另一种随时间重复执行某个动作的方法是使用 Timer 类,ENTER_FRAME就是enterframe 表示每秒一帧执行动作函数,实例参见手册
加载显示对象
Loader对象和URLRequest对象
监视加载进度
要访问加载的内容的属性,需要在 LoaderInfo 对象中添加事件侦听器,文件开始加载后,就创建了 LoaderInfo 对象。LoaderInfo 对象用于提供加载进度、加载者和被加载者的 URL、媒体的字节总数及媒体的标称高度和宽度等信息。在事件对象中target 属性包含对作为事件目标的对象的引用。currentTarget 属性包含对当前正在处理事件对象的对象的引用。参考手册上的例子
指定加载上下文
通过 Loader 类的 load() 或 loadBytes() 方法将外部文件加载到 Flash Player 中时,可以选择性地指定 context 参数。此参数是一个 LoaderContext 对象是用在跨域加载内容时。LoaderContext 类包括三个属性!
第十二章 处理几何结构
1 处理几何学简介
flash.geom 包中包含用于定义几何对象(如,点、矩形和转换矩阵)的类。这些类本身并不一定提供功能,但它们用于
定义在其它类中使用的对象的属性。可以使用 Point 类实例来表示坐标空间中的各个点。
2 使用 Point 对象
3 使用 Rectangle 对象
最后的实例中 var circleBounds:Rectangle = circle.getBounds(stage); getBounds(param)这个函数是返回相对于参数所在显示对象容器的原点的矩形坐标
4 使用 Matrix 对象
参见综合例子
sprite类和shape类的联系与区别
Sprite 类也包括 graphics 属性,并且它包括不可用于 Shape 类的其它功能。 例如,Sprite 对象是显示对象容器,而 Shape 对象不是(并且不能包含子显示对象)。 由于此原因,Shape 对象会比包含相同图形的 Sprite 对象消耗的内存少。 但是,Sprite 对象支持鼠标单击事件,而 Shape 对象不支持。
5 1弧度=pi/180 角度
第十三章 绘图API使用基础知识
1 使用绘图API简介
可以在任何 Shape、Sprite 或 MovieClip 实例中使用 ActionScript 进行绘制(使用其中的每个类中定义的 graphics 属性)。(实际上,每个类的 graphics 属性都是 Graphics 类的实例。)
2 了解 Graphics 类
如果要将显示对象仅用作内容绘制画布,则可以使用 Shape 实例,如果希望能够在显示对象上绘制图形内容,并且还希望该对象包含其它显示对象,则可以使用 Sprite 实例。有关确定用于各种任务的显示对象的详细信息参阅"选择displayobject 子类"
3 绘制直线和曲线
moveTo();是起始点,lineTo();是开始画线的点,一定是要现有moveTo()的
4 使用内置方法绘制形状
Graphics 类的 drawCircle()、drawEllipse()、drawRect()、drawRoundRect() 和 drawRoundRectComplex() 方法。这些方法可用于替代 lineTo() 和 curveTo() 方法。
5 创建渐变线条和填充
渐变笔触是使用 lineGradientStyle() 方法创建的;渐变填充是使用 beginGradientFill() 方法创建的。
6 使用绘图 API 进行动画处理
使用Event.ENTER_FRAME事件,使每个帧都执行侦听事件
7 将 Math 类与绘制方法配合使用
角度与弧度的转换:
var degrees = 121;
var radians = degrees * Math.PI / 180;
trace(radians) // 2.111848394913139
渐变填充的宽度和高度是由渐变矩阵的宽度和高度决定的,而不是由使用 Graphics 对象绘制的宽度和高度决定的