Flex第一步:基于ActionScript 3.0的Flex 2应用开发

6.5  自定义行为

6.5.1  了解行为的运行机制

除了组件内置的行为类型,Flex还支持用户自定义行为。由于行为对象分触发器和动画效果两部分,因此,行为自定义也分两部分,包括自定义触发器和自定义动画效果。

在创建动画效果之前,先来了解动画效果的运作方式。每个动画效果由两个对象来实现:一个生   成(factory)类和一个实例(instance)类,factory对象用来处理事件,控制动画,而instance对象则        包含了动画效果的逻辑实现。当动画开始播放时,factory对象将创建一个instance对象来执行动画效    果,一旦动画结束,这个对象会被销毁。如果有多个目标对象,会创建多个instance对象,使得一个      对象对应一个instance。factory对象名和动画效果名称相同,而instance对象名是动画效果名再加上后缀“Instance”。

例如在上一节中:

<mx:Move id="myMove" target="{img}" xFrom="50" xTo="150" duration="2000"/>

这句代码定义了一个Move对象,当动画播放时Move对象会生成一个MoveInstance对象,动画播放完毕,MoveInstance被删除。

下面列出了mx.effects中核心对象的层级关系,如图6.14所示。

图6.14 (a)中所示的是所有生成类的层级关系,图6.14(b)中的则是所有实例类的层级关系。在创建自定义动画效果时,只需选择上面的对象进行扩展即可。我们可以扩展Effect类,也可以扩展Effect的子类(如TweenEffect)。其中MaskEffect是遮罩类型,TweenEffect是渐变类型,CompositeEffect是复合类型。这里又以TweenEffect的使用最为广泛,之前讲到的AnimateProperty、 Blur、Dissolve、Fade、Glow、Move、Pause、Resize、Rotate、Zoom等都是TweenEffect的子类。复合类型并不是新类型,它只是其他动画效果的集合,Parallel和Sequence就是它的子类。

扩展Effect和EffectInstance对象时,必须覆盖父类的部分方法或属性。

     

(a)                                                                (b)

图6.14

表6.3列出了生成类中必须定义的属性和方法。

表6.3

函数名或属性

事 件 描 述

构造函数

必需的。类的构造函数,必须调用super()方法来调用父类的构造函数进行初始化,并且必须接受一个参数来指定目标对象。

initInstance()

必需的。将生成类的属性传到实例对象中,这个方法由Effect对象内部调用,不在外部使用。

另外,覆盖的函数体中必须执行函数:super.initInstance()。

getAffectedProperties()

必需的。返回一个字符串数组,包括目标对象被改变的属性名。如果没有改变,则返回空    数组。

effectStartHandler()

可选的。该函数在实例开始播放时被调用,如覆盖,需要执行super()方法。

effectEndHandler()

可选的。该函数在实例结束播放时被调用,如覆盖,需要执行super()方法。

其他属性和方法

可选的。自定义其他接口。

表6.4是实例类中必须定义的属性和方法。

表6.4

函数名或属性

事 件 描 述

构造函数

必需的。类的构造函数,必须调用super()方法来调用父类的构造函数进行初始化,有且必须接受一个参数来指定目标对象。

play()

必需的。控制动画的播放,覆盖的函数体中必须执行super.play()。

end()

可选的。结束动画播放。

initEffect()

可选的。该函数在动画效果被激活时被调用。

onTweenUpdate()

必需的。如果继承于TweenEffectInstance必须覆盖此方法。该函数在动画播放过程中,会被反复   调用。

onTweenEnd

可选的。如果继承于TweenEffectInstance才可以覆盖此方法。该函数在动画播放结束时会被调用,函数体中必须执行super.onTweenEnd()。

其他属性和方法

可选的。自定义其他接口。

通常情况下,我们没有必要直接扩展Effect和EffectInstance,更方便的做法是扩展它们的子类。例如TweenEffect和 TweenEffectInstance,在这些子类中已经实现了表中的核心方法,这会省很多事。另外,阅读Effect子类的源代码,是学习 Effect对象的一个好方法。

6.5.2  自定义动画效果——一个修改Iris效果的尝试

下面通过实例,修改Flex的Iris效果,来理解如何创建自定义的动画效果。

在修改前,让我们先来看看Iris类的代码。

首先,进入Flex SDK目录下的Flex SDK 2\frameworks\source源代码文件夹,再选择mx\effects文件夹,打开Iris.as和effectClasses文件夹中的 IrisInstance.as两个文件。下面是这两个文件的代码,这里省略了文件中的版权说明和注释文字:

Iris.as:

package mx.effects{

    //导入Iris的实例类

    import mx.effects.effectClasses.IrisInstance;

    //扩展MaskEffect

    public class Iris extends MaskEffect{

        //包含Flex组件版本说明文件

        include "../core/Version.as";

        //构造函数

        public function Iris(target:Object = null){

            //调用父类构造函数

            super(target);

            //指定实例类型

            instanceClass = IrisInstance;

        }

    }

}

这个类的代码很少,最关键的代码只有一行,就是:instanceClass = IrisInstance,表示Iris动画对应的动画实例对象是IrisInstance对象。

IrisInstance对象实现了动画的主体功能,下面是文件IrisInstance.as的内容:

package mx.effects.effectClasses{

    import mx.controls.SWFLoader;

    //扩展MaskEffectInstance

    public class IrisInstance extends MaskEffectInstance{

        include "../../core/Version.as";

        //构造函数

        public function IrisInstance(target:Object){   

            super(target);

        }

        //覆盖父类的方法

        override protected function initMaskEffect():void{

        //调用父类的同名方法

            super.initMaskEffect();

            //得到目标的实际尺寸

            //targetVisualBounds对象包括了目标可视区域的长和宽

            var targetWidth:Number = targetVisualBounds.width / Math.abs(target.scaleX);

            var targetHeight:Number = targetVisualBounds.height / Math.abs(target.scaleY);

            //如果目标是SWFLoader对象,则计算加载内容的尺寸,而不是目标本身的尺寸

            if (target is SWFLoader)    {

                targetWidth = target.contentWidth;

                targetHeight = target.contentHeight;       

            }

            //如果showTarget为true,表示显示目标     

            if (showTarget){

                //定义x、y方向的起始放缩值

                scaleXFrom = 0;

                scaleYFrom = 0;

                scaleXTo = 1;

                scaleYTo = 1;  

                //目标的起始位置     

                xFrom = targetWidth / 2 + targetVisualBounds.x;

                yFrom = targetHeight / 2 + targetVisualBounds.y;

                //确定最后的坐标

                xTo = targetVisualBounds.x;

                yTo = targetVisualBounds.y;

            }else{

                //如果是隐藏目标

                scaleXFrom = 1; 

                scaleYFrom = 1;

                scaleXTo = 0;

                scaleYTo = 0;  

                //目标的起始位置             

                xFrom = targetVisualBounds.x;

                yFrom = targetVisualBounds.y;

                //确定最后的坐标

                xTo = targetWidth / 2 + targetVisualBounds.x;

                yTo = targetHeight / 2 + targetVisualBounds.y;

            }

        }

    }

}

IrisInstance中只有一个核心函数initMaskEffect,主要用来计算动画的各种参数,包括起始值、位置、坐标点等等。

相对其他动画效果而言,Iris效果的这两个类的代码较少,适合我们来学习和修改。

默认状态下Iris采用的遮罩层是矩形的,且动画始终以组件为中心进行运作,我们的目的是将遮罩层修改为圆形,且能选择动画播放时的中心点。

接下来,创建项目NewIris,并分别创建NewIrisEffect.as和NewIrisInstance.as两个类,在Iris两个源文件的基础上进行修改,新文件的内容如下:

源代码:NewIrisEffect.as

package tree{

    //导入代码中使用的对象

    import mx.effects.MaskEffect;

    import mx.effects.EffectInstance;

    import mx.controls.SWFLoader;  

    import flash.display.Shape;

    import mx.core.FlexShape;

    import flash.display.Graphics;

    import flash.geom.Rectangle;   

    //保持原来类的结构不变,继续扩展MaskEffect对象

    public class NewIrisEffect extends MaskEffect {

        //表明动画采用的起始点的类型

        public var position:String;

        //构造函数

        function NewIrisEffect(target:Object = null){

            super(target);

            //定义实例类型为NewIrisInstance,代替原来的IrisInstance

            //NewIrisInstance是我们新建的对象

            instanceClass = NewIrisInstance;   

            //定义新的createMaskFunction,此函数用于绘制遮罩层     

            this.createMaskFunction = createLargeMask;

        }

        //此函数用来绘制遮罩层

        //函数原形来自mx.effects.effectClasses. MaskEffectInstance对象的defaultCreateMask

函数

        public function createLargeMask(targ:Object, bounds:Rectangle):Shape{

            //绘制前,首先获得目标的尺寸,来确定遮罩层的尺寸

            //默认情况下,遮罩层和目标对象的尺寸一致    

            var targetWidth:Number = bounds.width / Math.abs(targ.scaleX);

            var targetHeight:Number = bounds.height / Math.abs(targ.scaleY);

            //

            if (targ is SWFLoader)  {

                // 如果是加载外部内容,则以外部内容的尺寸为准

                targ.validateDisplayList();

                if (targ.content){

                    targetWidth = targ.contentWidth;

                    targetHeight = targ.contentHeight;

                }

            }

            //创建遮罩层的表现对象    

            var newMask:Shape = new FlexShape();

            var g:Graphics = newMask.graphics;

            //设定填充色

            g.beginFill(0xFFFF00);

            //绘制椭圆,drawEllipse是Graphics对象的绘制方法之一

            g.drawEllipse(0,0,targetWidth,targetHeight);

            //默认情况下绘制矩形,这里将这句代码注释掉

            //g.drawRect(0, 0, targetWidth, targetHeight); 

            g.endFill();

            //判断是否旋转

            if (target.rotation == 0)   {

            //如果目标没有旋转

                newMask.width = targetWidth;

                newMask.height = targetHeight;

            }else{

                //如果有旋转,重新计算遮罩层的大小

                //得到角度的弧度数

                var angle:Number = targ.rotation * Math.PI / 180;          

                var sin:Number = Math.sin(angle);

                var cos:Number = Math.cos(angle);  

                //计算出新的尺寸     

                newMask.width =  Math.abs(targetWidth * cos - targetHeight * sin);

                newMask.height = Math.abs(targetWidth * sin + targetHeight * cos);

            }      

            return newMask;

        }      

        //覆盖父类的initInstance方法。

        //将生成类的属性传到实例对象中,这个方法在对象内部被调用

        override protected function initInstance(instance:EffectInstance):void  {

            //必须调用父类的同名方法

            super.initInstance(instance);

            //创建新的实例

            var maskEffectInstance:NewIrisInstance = NewIrisInstance(instance);    

            //传递参数给实例

            maskEffectInstance.showTarget = showTarget;

            maskEffectInstance.xFrom = xFrom;

            maskEffectInstance.yFrom = yFrom;

            maskEffectInstance.xTo = xTo;

            maskEffectInstance.yTo = yTo;

            maskEffectInstance.scaleXFrom = scaleXFrom;

            maskEffectInstance.scaleXTo = scaleXTo;

            maskEffectInstance.scaleYFrom = scaleYFrom;

            maskEffectInstance.scaleYTo = scaleYTo;

            //这是新添加的参数,用来确定动画执行时的初始位置

            //是我们实现新的Iris效果的关键

            maskEffectInstance.position = position

        }

    }

}

在NewIrisEffect类中,我们修改了Iris类的代码,主要包括两点:

(1)覆盖了createMaskFunction函数,该函数主要用来绘制遮罩层。createMaskFunction函数原形来自 mx.effects.effectClasses.MaskEffectInstance对象的defaultCreateMask函数,这里只是做了一点小小的修改,在绘制矩形的位置:

//默认情况下绘制矩形

//g.drawRect(0, 0, targetWidth, targetHeight); 

修改为:

g.drawEllipse(0,0,targetWidth,targetHeight);

其中g是Graphics类型,drawEllipse和drawRect都是Graphics对象的绘图函数,drawEllipse用来绘制椭圆,drawRect用来绘制矩形。

createMaskFunction函数的其他部分和defaultCreateMask函数相同,读者可以参照注释阅读其他部分的代码,这里并不需要完全理解这些代码的含义。

(2)覆盖了initInstance方法,用来创建新的NewIrisInstance对象。initInstance方法是Effect对象的核心方法,用来创建动画实例,因为我们修改了实例对象,所以也要修改initInstance方法。在initInstance方法中,必须调用父类的同名方法。同时,要创建新的动画实例,并给实例对象传递参数:

var maskEffectInstance:NewIrisInstance = NewIrisInstance(instance);

maskEffectInstance.position = position;

NewIrisInstance是新创建的实例对象,其position属性是我们添加的一个属性,用来标示动画的参照位置,这个参数在后面要使用到。

在NewIrisEffect的构造函数中,覆盖了原来的两个属性:

//定义实例类型为NewIrisInstance,代替原来的IrisInstance

instanceClass = NewIrisInstance;   

//定义新的createMaskFunction,此函数用于绘制遮罩层     

this.createMaskFunction = createLargeMask;

这样,整个NewIrisEffect对象就完成了,接着是NewIrisInstance.as的源代码:

package tree{

    import mx.effects.effectClasses.MaskEffectInstance 

    import mx.controls.SWFLoader;

    public class NewIrisInstance extends MaskEffectInstance {

        //新添加的参数,用来确定动画播放时的初始位置

        public var position:String;

        //构造函数

        public function NewIrisInstance(target:Object)  {  

            super(target);         

        }      

        //* 覆盖父类方法,initMaskEffect主要是初始化遮罩动画的信息

        //此函数取自IrisInstance的同名函数

        override protected function initMaskEffect():void{     

            //调用父类的同名方法  

            super.initMaskEffect();

            //计算出目标的尺寸

            //targetVisualBounds包括了目标可视区域的长、宽

            var targetWidth:Number = targetVisualBounds.width / Math.abs(target.scaleX);

            var targetHeight:Number = targetVisualBounds.height / Math.abs(target.scaleY);

            //如果是SWFLoader,以记载的内容的尺寸为准

            if (target is SWFLoader){

                targetWidth = target.contentWidth;

                targetHeight = target.contentHeight;       

            }

            //如果是让目标出现

            if (showTarget){               

                scaleXFrom = 0;

                scaleYFrom = 0;

                scaleXTo = 1;

                scaleYTo = 1;

                //依据position属性来决定起点的位置

                //如果中心是左上角

                if(position == "leftTop"){

                    //从左上角开始

                    //targetVisualBounds还包括了目标可视区域的坐标位置

                    xFrom = targetVisualBounds.x;

                    yFrom = targetVisualBounds.y;

                }else if(position == "rightBottom"){

                    //如果中心是右下角

                    //从右上角开始

                    xFrom = targetWidth+ targetVisualBounds.x;

                    yFrom = targetHeight + targetVisualBounds.y;

                }else{

                    //默认从中心开始,保持原来的计算方式不变

                    xFrom = targetWidth / 2 + targetVisualBounds.x;

                    yFrom = targetHeight / 2 + targetVisualBounds.y;

                }

                //终点位置

                xTo = targetVisualBounds.x;

                yTo = targetVisualBounds.y;            

            }else{

                scaleXFrom = 1;

                scaleYFrom = 1;

                scaleXTo = 0;

                scaleYTo = 0;

                //消失动画的起点

                xFrom = targetVisualBounds.x;

                yFrom = targetVisualBounds.y;

                //再计算一遍新的位置

                if(position == "leftTop"){

                    xTo = targetVisualBounds.x;

                    yTo = targetVisualBounds.y;

                }else if(position == "rightBottom"){

                    xTo = targetWidth + targetVisualBounds.x;

                    yTo = targetHeight + targetVisualBounds.y;

                }else{

                    xTo = targetWidth / 2 + targetVisualBounds.x;

                    yTo = targetHeight / 2 + targetVisualBounds.y;

                }

            }

        }

    }

}

NewIrisInstance沿用了IrisInstance对象的代码,只不过在initMaskEffect方法中,加入了判断动画参照点的代码,用来实现我们的新功能:

if(position == "leftTop"){

    //从左上角开始

    //targetVisualBounds还包括了目标可视区域的坐标位置

    xFrom = targetVisualBounds.x;

    yFrom = targetVisualBounds.y;

}else if(position == "rightBottom"){

    //从右下角开始

    xFrom = targetWidth+ targetVisualBounds.x;

    yFrom = targetHeight + targetVisualBounds.y;

}else{

    //默认从中心开始,保持原来的计算方式不变

    xFrom = targetWidth / 2 + targetVisualBounds.x;

    yFrom = targetHeight / 2 + targetVisualBounds.y;

}

position 属性存放了参照点位置,这个参数是在NewIrisEffect对象的initInstance函数中被传递过来的。 targetVisualBounds中包括了目标对象可视区域的坐标位置,利用这个对象,我们可以很快计算出参照点的坐标。这里一共添加了两个位置: leftTop和rightBottom,分别表示左上角和右下角。

完成了动画对象的所有代码后,下面就尝试将它们运用在实例中。在NewIris主程序中插入相应代码,代码如下:

<?xml version="1.0" encoding="utf-8"?>

<!-- 定义命名空间,把新创建的对象都放入tree文件夹中 -->

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:tree = "tree.*"

layout="absolute">

    <mx:Style source="style.css" />

    <!-- 定义动画效果 -->

    <tree:NewIrisEffect position="leftTop" id="myIris" duration="1000"/>

    <!-- 动画效果绑定在图片上 -->

    <mx:Image id="img" x="49" y="63" source="tree.jpg" showEffect="{myIris}" hideEffect=

    "{myIris}" />

    <!-- 改变图片的visible属性 -->

    <mx:Button x="49" y="173" label="播放" click="img.visible = !img.visible"/>

   

</mx:Application>

在代码中,使用MXML语句创建了一个NewIrisEffect对象:

<tree:NewIrisEffect position="leftTop" id="myIris" duration="1000"/>

文本框:   图6.15

NewIrisEffect的用法和其他动画对象的用法没什么差别,这里多了一个position属性,用来指定动画的参照点方式。

Image控件中,仍然是使用showEffect和hideEffect来指定动画对象。

按下Ctrl+F11快捷键运行程序。点击按钮,运行的效果如图6.15所示。

至此,完成了一个简单的动画效果。

通过修改Flex效果库中的动画对象,可以加深对动画对象的理解。

6.5.3  自定义触发器

触发器通常和事件相关联,要使对象具有行为属性,必须将事件和效果组合起来,形成一个触发器。

在上一节的NewIris程序的基础上,我们继续完善自定义的动画效果。下面创建一个新的用户组件ImgBox,放在tree文件夹中,编写代码如下。

源代码:tree/ImgBox.mxml

<?xml version="1.0" encoding="utf-8"?>

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="90" height="90">

    <!-- 元数据标签 -->

    <mx:Metadata>

        <!-- 为事件和效果触发器定义元数据 -->

        [Event(name="hideImage", type="flash.events.Event")]

        [Event(name="showImage", type="flash.events.Event")]

        <!-- 将事件和效果联系起来 -->

        [Effect(name="hideImageEffect", event="hideImage")]

        [Effect(name="showImageEffect", event="showImage")]

    </mx:Metadata>

    <mx:Script>

        <![CDATA[

            //鼠标按下事件

            internal function doDown():void{

                dispatchEvent(new Event("hideImage"));  //派发事件

            }

            internal function doUp():void{

                dispatchEvent(new Event("showImage"));  //派发事件

            }

        ]]>

    </mx:Script>

    <!--给图片添加鼠标按下和松开的动作事件-- >

    <mx:Image id="img" source="tree.jpg" mouseDown="doDown()" mouseUp="doUp()"/>   

</mx:Canvas>

这里使用了<mx:Metadata>元标签给用户组件添加了两个事件:hideImage和showImage,然后将事件和Effect动画联系起来,形成触发器。

使用元标签定义的事件可以在MXML代码中直接引用,但前提是这些事件必须是组件本身派发出去的,比如这里的hideImage事件:

[Event(name="hideImage", type="flash.events.Event")]

在type属性中,要明确标示事件类型。否则在MXML中添加事件监听函数时,将无法正确访问到事件对象。

使用元标签定义的行为触发器,必须和元标签定义的事件关联起来:

[Effect(name="hideImageEffect", event="hideImage")]

Effect标记要来定义触发器,name表示触发器名称,供外部访问,event表示触发器对应的事件,这个事件必须是经过元标签定义过的。

将事件和触发器定义好,就可以在外部控制这些属性。接下来,修改主程序NewIris.mxml如下所示。

源代码:NewIris.mxml

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:tree = "tree.*"

layout="absolute">

    <mx:Style source="style.css" />

    <!-- 定义了两个新的NewIris效果,用来响应图片的行为-- >

    <tree:NewIrisEffect position="leftTop" scaleXFrom="0.1" scaleXTo="1" id="myIris"

    duration="2000"/>  

    <tree:NewIrisEffect position="rightBottom" scaleXFrom="1" scaleXTo="0.1"

    id="myIris2" duration="2000"/>

    <!-- showImageEffect和hideImageEffect是组件内定义的触发器-->

    <tree:ImgBox  x="49" y="64" showImageEffect="myIris" hideImageEffect="myIris2"/ >

</mx:Application>

在代码中,利用ImgBox的showImageEffect和hideImageEffect触发器,给组件分别定义了两个NewIrisEffect效果。showImageEffect和hideImageEffect就好比是组件的两个属性,可以随意修改。

运行程序,在图片上按下鼠标不动,观看动画播放,如图6.16所示。松开鼠标,另一个动画开始     播放。

鼠标按下时                              鼠标松开后

图6.16

至此,我们完成一个完整的自定义行为。这个行为效果和程序并没有直接联系,可以被重复使用。只需要把tree目录(包括NewIrisEffect.as和NewIrisInstance.as)拷贝到其他程序中,就可以使用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 第 1 章 : 使用日期和时间 第 2 章 : 使用字符串 第 3 章 : 使用数组 第 4 章 : 处理错误 第 5 章 : 使用正则表达式 第 6 章 : 使用 XML 第 7 章 : 使用本机 JSON 功能 第 8 章 : 处理事件 第 9 章 : 使用应用程序域 第 10 章 : 显示编程 第 11 章 : 使用几何结构 第 12 章 : 使用绘图 API 第 13 章 : 使用位图 第 14 章 : 过滤显示对象 第 15 章 : 使用 Pixel Bender 着色器 第 16 章 : 使用影片剪辑 第 17 章 : 使用补间动画 第 18 章 : 使用反向运动 第 19 章 : 在三维 (3D) 环境中工作 第 20 章 : 文本使用基础知识 第 21 章 : 使用 TextField 类 第 22 章 : 使用 Flash 文本引擎 第 23 章 : 使用 Text Layout Framework 第 24 章 : 处理声音 第 25 章 : 使用视频 第 26 章 : 使用摄像头 第 27 章 : 使用数字权限管理 第 28 章 : 在 AIR 中添加 PDF 内容 第 29 章 : 用户交互的基础知识 第 30 章 : 键盘输入 第 31 章 : 鼠标输入 第 32 章 : 触摸、多点触控和手势输入 第 33 章 : 复制和粘贴 第 34 章 : 加速计输入 第 35 章 : AIR 中的拖放 第 36 章 : 使用菜单 第 37 章 : AIR 中的任务栏图标 第 38 章 : 使用文件系统 第 39 章 : 存储本地数据 第 40 章 : 在 AIR 中使用本地 SQL 数据库 第 41 章 : 使用字节数组 第 42 章 : 网络和通信基础知识 第 43 章 : 套接字 第 44 章 : HTTP 通信 第 45 章 : 与其他 Flash Player 和 AIR 实例通信 第 46 章 : 与 AIR 中的本机进程通信 第 47 章 : 使用外部 API 第 48 章 : AIR 中的 XML 签名验证 第 49 章 : 客户端系统环境 第 50 章 : AIR 应用程序的调用和终止 第 51 章 : 处理 AIR 运行时和操作系统信息 第 52 章 : 使用 AIR 本机窗口 第 53 章 : AIR 中的显示屏幕 第 54 章 : 打印 第 55 章 : Geolocation 第 56 章 : 应用程序国际化 第 57 章 : 本地化应用程序 第 58 章 : 关于 HTML 环境 第 59 章 : 在 AIR 中进行 HTML 和 JavaScript 编程 第 60 章 : 为 AIR HTML 容器编写脚本 第 61 章 : 处理 AIR 中与 HTML 相关的事件 第 62 章 : 在移动应用程序中显示 HTML 内容 第 63 章 : 安全性 第 64 章 : 如何使用 ActionScript 示例 第 65 章 : 本地数据库中的 SQL 支持 第 66 章 : SQL 错误详细消息、 ID 和参数 第 67 章 : Adobe 图形汇编语言 (AGAL)
actionScript 3.0开发人员指南中文版,总共67章,955页。学习actionScript不错的书籍。 目录: 目录 第章:使用日期和时间 管理日历日期和时间 控制时间间隔 日期和时间示例:简单模拟时钟 第章:使用字符串 字符串基础知识 创建字符串 length属性 处理字符串中的字符 比较字符串 获取其他对象的字符串表示形式 连接字符串 在字符串中查找子字符串和模式 转换字符串的大小写 字符串示例:ASCII图表 第章:使用数组 数组基础知识 索引数组 关联数组 多维数组 克隆数组 扩展Array类 数组示例:播放列表 第章:处理错误 错误处理基础知识 错误类型 ActionScript中的错误处理 使用Flash运行时的调试版 在应用程序中处理同步错误 创建自定义错误类 响应错误事件和状态 比较错误类 处理错误示例:CustomErrors应用程序 第章:使用正则表达式 正则表达式基础知识 正则表达式语法 对字符串使用正则表达式的方法 正则表达式示例:Wiki解析程序 第章:使用XML XML基础知识 用于处理XML的EX方法 XML对象 XMLList对象 初始化XML变量 组合和变换XML对象 遍历XML结构 使用XML命名空间 XML类型转换 读取外部XML文档 在ActionScript中使用XML的示例:从Internet加载RSS数据 第章:使用本机JSON功能 JSONAPI概述 定义自定义JSON行为 第章:处理事件 事件处理基础知识 ActionScript事件处理与早期版本事件处理的不同之处 事件流 事件对象 事件侦听器 事件处理示例:闹钟 第章:使用应用程序域 第章:显示编程 显示编程的基础知识 核心显示类 显示列表方法的优点 使用显示对象 处理显示对象 对象动画 舞台方向 动态加载显示内容 显示对象示例:SpriteArranger 第章:使用几何结构 几何结构基础知识 使用Point对象 使用Rectangle对象 使用Matrix对象 几何形状示例:对显示对象应用矩阵转换 第章:使用绘图API 绘制API的基础 Graphics类 绘制线条和曲线 使用内置方法绘制形状 创建渐变线条和填充 将Math类与绘制方法配合使用 使用绘图API进行动画处理 绘制API示例:算法可视化生成器 绘图API高级用法 第章:使用位图 位图使用基本知识 Bitmap和BitmapData类 处理像素 复制位图数据 使用杂点功能制作纹理 滚动位图 利用mipmap处理 位图示例:带动画效果的旋转的月亮 位图图像的异步解码 第章:过滤显示对象 过滤显示对象的基础知识 创建和应用滤镜 可用的显示滤镜 筛选显示对象示例:FilterWorkbench 第章:使用PixelBender着色器 PixelBender着色器基础知识 加载或嵌入着色器 访问着色器元数据 指定着色器输入和参数值 使用着色器 第章:使用影片剪辑 影片剪辑基础知识 使用MovieClip对象 控制影片剪辑播放 使用ActionScript创建MovieClip对象 加载外部SWF文件 影片剪辑示例:RuntimeAssetsExplorer 第章:使用补间动画 补间动画基础知识 在Flash中复制补间动画脚本 合并补间动画脚本 描述动画 添加滤镜 将补间动画与其显示对象关联 第章:使用反向运动 反向运动的基础知识 IK骨架动画处理概述 获取有关IK骨架的信息 实例化IKMover并限制其移动 移动IK骨架 使用弹簧 使用IK事件 第章:在三维(D)环境中工作 D显示对象的基础知识 了解FlashPlayer和AIR运行时中的D显示对象 创建和移动D显示对象 将D对象投影到D视图上 示例:透视投影 执行复杂的D转换 通过三角形获得D效果 第章:文本使用基础知识 第章:使用TextField类 显示文本 选择和操作文本 捕获文本输入 限制文本输入 设置文本格式 高级文本呈现 使用静态文本 TextField示例:报纸风格的文本格式设置 第章:使用Flash文本引擎 创建和显示文本 处理FTE中的事件 设置文本格式 使用字体 控制文本 Flash文本引擎示例:新闻版面布局 第章:使用TextLayoutFramework TextLayoutFramework概述 使用TextLayoutFramework 使用TLF构建文本结构 使用TLF设置文本格式 使用TLF导入和导出文本 使用TLF管理文本容器 使用TLF启用文本选择、编辑和撤消 使用TLF处理事件 在文本内定位图像 第章:处理声音 声音处理基础知识 了解声音体系结构 加载外部声音文件 处理嵌入的声音 处理声音流文件 处理动态生成的音频 播放声音 加载和播放声音时的安全注意事项 控制音量和声相 处理声音元数据 访问原始声音数据 捕获声音输入 声音示例:PodcastPlayer 第章:使用视频 视频基础知识 了解视频格式 了解Video类 加载视频文件 控制视频播放 在全屏模式下播放视频 流式传输视频文件 了解提示点 编写元数据和提示点的回调方法 使用提示点和元数据 监控NetStream活动 视频文件的高级主题 视频示例:视频自动唱片点唱机 使用StageVideo类来实现硬件加速呈现 第章:使用摄像头 了解Camera类 在屏幕上显示摄像头内容 设计摄像头应用程序 连接至用户的摄像头 验证是否已安装摄像头 检测摄像头的访问权限 最优化摄像头视频品质 监控摄像头状态 第章:使用数字权限管理 了解受保护的内容工作流程 NetStream类中与DRM相关的成员和事件 使用DRMStatusEvent类 使用DRMAuthenticateEvent类 使用DRMErrorEvent类 使用DRMManager类 使用DRMContentData类 更新FlashPlayer以支持FlashAccess 带外许可证 域支持 使用域支持播放加密的内容 许可证预览 提交内容 OpenSourceMediaFramework 第章:在AIR中添加PDF内容 检测PDF功能 加载PDF内容 编写PDF内容的脚本 对AIR中的PDF内容的已知限制 第章:用户交互的基础知识 捕获用户输入 管理焦点 了解输入类型 第章:键盘输入 捕获键盘输入 使用IME类 虚拟键盘 第章:鼠标输入 捕获鼠标输入 鼠标输入示例:WordSearch 第章:触摸、多点触控和手势输入 触摸输入的基础知识 触摸支持发现 Touch事件处理 触摸和拖动 Gesture事件处理 疑难解答 第章:复制和粘贴 复制粘贴基础知识 读取和写入系统剪贴板 AIR中的HTML复制和粘贴 剪贴板数据格式 第章:加速器输入 检查加速计支持 检测加速计更改 第章:AIR中的拖放 AIR中拖放的基础知识 支持拖出手势 支持拖入手势 HTML中的拖放 将数据拖出HTML元素 将数据拖入HTML元素 示例:覆盖默认的HTML拖入行为 在非应用程序HTML沙箱中处理文件放置 放置文件释放 第章:使用菜单 菜单基础知识 创建本机菜单(AIR) 关于HTML中的上下文菜单(AIR) 显示弹出本机菜单(AIR) 处理菜单事件 本机菜单示例:窗口和应用程序菜单(AIR) 第章:AIR中的任务栏图标 关于任务栏图标 停靠栏图标 系统任务栏图标 Window任务栏图标和按钮 第章:使用文件系统 使用FileReference类 使用AIR文件系统API 第章:存储本地数据 共享对象 加密的本地存储区 第章:在AIR中使用本地SQL数据库 关于本地SQL数据库 创建和修改数据库 操作SQL数据库数据 使用同步和异步数据库操作 对SQL数据库使用加密 使用SQL数据库的策略 第章:使用字节数组 读取并写入ByteArray ByteArray示例:读取zip文件 第章:网络和通信基础知识 网络接口 网络连接更改 域名系统(DNS)记录 第章:套接字 TCP套接字 UDP套接字(AIR) IPv地址 第章:HTTP通信 加载外部数据 Web服务请求 在其他应用程序中打开URL 第章:与其他FlashPlayer和AIR实例通信 关于LocalConnection类 在两个应用程序之间发送消息 连接到不同域中的内容和AIR应用程序 第章:与AIR中的本机进程通信 本机进程通信概述 启动和关闭本机进程 与本机进程通信 本机进程通信的安全性注意事项 第章:使用外部API 使用外部API的基础知识 外部API要求和优点 使用ExternalInterface类 外部API示例:在ActionScript和Web浏览器中的JavaScript之间进行通信 第章:AIR中的XML签名验证 XML签名验证的基础知识 关于XML签名 实现IURIDereferencer接口 第章:客户端系统环境 客户端系统环境基础知识 使用System类 使用Capabilities类 功能示例:检测系统功能 第章:AIR应用程序的调用和终止 应用程序调用 捕获命令行参数 用户登录时调用AIR应用程序 从浏览器调用AIR应用程序 应用程序终止 第章:处理AIR运行时和操作系统信息 管理文件关联 获取运行时版本和修补级别 检测AIR功能 跟踪用户当前状态 第章:使用AIR本机窗口 AIR中的本机窗口的基础知识 创建窗口 管理窗口 侦听窗口事件 显示全屏窗口 第章:AIR中的显示屏幕 AIR中的显示屏幕的基础知识 枚举屏幕 第章:打印 打印基础知识 打印页面 Flash运行时任务和系统打印 设置大小、缩放和方向 高级打印技术 打印示例:多页面打印 打印示例:缩放、裁剪和响应 打印示例:页面设置和打印选项 第章:Geolocation 检测geolocation更改 第章:应用程序国际化 应用程序国际化基础知识 flashglobalization包概述 确定区域设置 设置数字格式 设置货币值格式 设置日期和时间格式 排序和比较字符串 大小写转换 示例:国际化股票报价应用程序 第章:本地化应用程序 选择区域设置 本地化Flex内容 本地化Flash内容 本地化AIR应用程序 对日期、时间和货币进行本地化 第章:关于HTML环境 HTML环境概述 AIR和WebKit 第章:在AIR中进行HTML和JavaScript编程 关于HTMLLoader类 避免与安全相关的JavaScript错误 通过JavaScript访问AIRAPI类 关于AIR中的URL 使ActionScript对象可用于JavaScript 从ActionScript访问HTMLDOM和JavaScript对象 在HTML中嵌入SWF内容 在HTML页中使用ActionScript库 转换Date和RegExp对象 从ActionScript操作HTML样式表 跨脚本访问不同安全沙箱中的内容 第章:为AIRHTML容器编写脚本 HTMLLoader对象的显示属性 滚动HTML内容 访问HTML历史记录列表 设置在加载HTML内容时使用的用户代理 设置用于HTML内容的字符编码 为HTML内容定义类似于浏览器的用户界面 创建HTMLLoader类的子类 第章:处理AIR中与HTML相关的事件 HTMLLoader事件 使用ActionScript处理DOM事件 响应未捕获的JavaScript异常 使用JavaScript处理运行时事件 第章:在移动应用程序中显示HTML内容 StageWebView对象 内容 导航事件 历史记录 焦点 位图捕获 第章:安全性 FlashPlatform安全概述 安全沙箱 权限控制 限制网络API 全屏模式安全性 加载内容 跨脚本访问 作为数据访问加载的媒体 加载数据 从导入到安全域的SWF文件加载嵌入内容 使用旧内容 设置LocalConnection权限 控制外出URL访问 共享对象 摄像头、麦克风、剪贴板、鼠标和键盘访问 AIR安全性 第章:如何使用ActionScript示例 示例类型 在FlashProfessional中运行ActionScript示例 在FlashBuilder中运行ActionScript示例 在移动设备上运行ActionScript示例 第章:本地数据库中的SQL支持 支持的SQL语法 数据类型支持 第章:SQL错误详细消息、ID和参数 第章:Adobe图形汇编语言(AGAL) AGAL字节码格式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值