Flash MX Professional 2004 V2组件的开发

  在Flash MX Professional 2004中,开发人员开可以在项目中自己创建新的V2组件。在开始开发V2组件之前,首先要了解MovieClip类、UIObject类和UIComponent类,因为它们是Flash V2组件的基类,所有Flash自带的组件都是它们的直接或间接子类。开发一个组件可以从原先的父类继承,扩展现有的组件类,使被创建的组件在父类的基础上进一步扩展。另外,也可以创建一个不带父类的组件,以实现一些其它的功能。在这里将重点讨论如何扩展现有的组件类。扩展一个现有组件类,通常包括以下几个步骤:

  1、组件首先作为一个电影剪辑(MovieClip)被创建,在该电影剪辑中创建两个图层,分别用于组件界面元素和脚本。然后在库的下拉菜单中选择Component Defination,在该对话框中的AS2.0 Class中输入该组件所要关联的类的完全限定名。当界面元素定义完成以后,就可以在外部文件中创建组件的属性、事件和方法,当然,组件的界面元素也可以在类中使用代码动态创建。

  2、在定义组件类文件时,首先必须导入所需要的类,前面已经说过,MovieClip类、UIObject类和UIComponent类是V2组件的基类,所以如果当前创建的组件是从V2组件的任意组件扩展,那么就必须了解这三个基类,和其下的相关组件类。关于组件的特性可以查看Macromedia公司发布的组件字典,也可以直接在FlashInstalDir\en\First Run\Classes目录查看类文件代码。

  3、确定组件所要扩展的类以后,就要为组件类编写构造函数(Constructor)。一般情况下,构造函数建议为空,这样才能用对象的属性接口来定义对象属性。此外,根据初始化调用顺序的不同,有时在构造函数中设置属性会导致覆盖默认值。

  4、接下来要做的是添加组件的版本信息,如果当前开发的组件是作为组件包的一部分,那么可以把版本信息放到另外一个外部文件中。在定义版本信息时,可以继承UIObject类的静态字符串属性version。另外还需要定义三个比较重要的属性:symbolName,symbolOwner和className;他们都是从组件基类继承的。symbolName定义为静态的字符串变量,用于指定组件符号的名称;symbolOwner定义为静态的Object类型,是该类的一个完全限定名,它将在createClassObject() 方法的内部调用中被使用;className定义了组件类名称。

  5、当这些都完成以后,就要开始定义组件功能相关的属性和方法。在属性和方法定义时,比较好的做法是确定每一个属性和方法的访问特性,使组件为用户提供一个良好的应用程序接口(API)。所以在定义属性和方法时要使用private和public来声明属性的可访问性,并使用setter和getter函数来设置和获取属性的值。这样就更好的地实现了组件的封装,使用户无须了解组件的内部细节。

  所有组件必须实现两个核心方法:始化方法和大小调整。如果不在自定义组件的类文件中覆盖两个方法,Flash Player 可能会产生错误。Flash 在创建类时调用初始化方法。初始化方法应该调用父类的初始化方法,因为只有在调用此方法之后,才能正确设置width、height 和和其它的影片剪辑参数。

function init(Void):Void

{

// 调用父类的初始化方法

super.init();

//在这里添加与本组件相关的初始化代码

}

大小调整的方法也与初始化方法类似:

function size(Void):Void

{

super.size();

//在这里添加与本组件相关的大小调整代码

}  6、为了让属性在开发面板中可见,还必须为属性声明相关的元数据(Metadata)。元数据标记可以定义组件属性、数据绑定属性和事件。Flash 可以解释这些语句并相应地更新开发环境。元数据与类声明或单个的数据字段相关。元数据语句绑定到脚本的下一行。例如,在定义组件属性时,在属性声明的前一行添加元数据标记。在定义组件事件时,在类定义之外添加元数据标记,以便将事件绑定到整个类。对属性而言,有两个比较重要的元数据:Inspectable和InspectableList。

  Inspectable元数据定义了在“组件检查器(Component Inspector)”面板中向用户显示的组件的属性。语法如下:

[Inspectable( value_type=value [,attribute=value,...] ) ]

property_declaration name:type;

Inspectable元数据还包括若干元数据标记:

·name:类型为String(可选),属性在开发面板中的显示名称。

·type:类型为String(可选)指定属性的类型。如果省略,则使用属性的类型。以下下是可接受的值: Array、 Object、List、String、Number、Boolean、Font Name、Color。

·defaultvalue:类型可以是String或Number(必需)。指定属性的默认值。

·enumeration:类型为String(可选)。指定以逗号分隔的属性合法值列表。

·category:类型为String(可选)。将属性划分到属性检查器中的某个特定子类别中。

  InspectableList 元数据关键字用于确切地指定属性检查器中应显示可检查参数的哪个子集。可以将 InspectableList 与 Inspectable 组合使用,这样即可隐藏子类组件的继承属性。如果不给组件的类添加 InspectableList 元数据关键字,所有可检查的参数(包括组件父类的可检查参数)都会显示在属性检查器中。其的语法如下:

[InspectableList("attribute1"[,...])]

// class definition

InspectableList 关键字必须紧挨着类定义且在它之前,因为它应用于整个类。

  7、定义组件的事件,首先要使用Event元数据关键字声明事件。Event 元数据关键字用于定义组件事件。其语法如下:

  [Event("event_name")]

  在类文件中必须把 Event 语句添加到类定义之外,以便将它们绑定到类,而不绑定到类的特定成员。首先组件类会继承基类事件。如果当前定义组件的基类是UIComponent,那么该组件中已经包括了MovieClip类、UIObject类和UIComponent类的28个事件。但事实上,这28个事件并不是都可以用的。其原因很简单,因为组件可以有它的组成结构,组件内部可能还有组件或是其它的元件实例。组件要为用户提供一个统一的接口,就必须抽取其内部结构的某些事件并把它们定义为组件的事件,这是一种基于组件内部组成结构的事件。比如说组件包括两个文本框T1和T2,这时可以根据组件的功能要求把T1的change事件发布为组件的PP事件,而把T2的change事件发布为组件的UU事件,当然关于组件事件的名称可以由组件开发人员自己定义。

  那么究竟如何为组件定义一个新的事件呢?对于上面的那个例子,可以做如下定义:

//导入类

import mx.core.UIComponent;

//用元数据声明组件事件

[Event("PP")]

[Event("UU")]

//指明该类从UIComponent继承

class T_T extends UIComponent

{

//在编辑环境中已经创建两个输入文本(Input Text),并在类中声名其引用。

var T1:TextField;

var T2:TextField;

//定义构造函数

function T_T()

{

//在构造函数中发布T1的change事件

T1.onChanged=function()

{ //创建一个事件对象,存放与事件相关的信息

var eventObj = new Object();

//定义事件类型的名称

eventObj.type = "PP";

//指明事件广播(发生)的对象

eventObj.target = _parent;

//把事件作为组件的事件发布

_parent.dispatchEvent(eventObj);

}

//在构造函数中发布T2的change事件

T2.onChanged=function()

{

var eventObj = new Object();

eventObj.type = "UU";

eventObj.target =_parent;

_parent.dispatchEvent(eventObj);

}

}

}  在以上代码中,先用元数据声明了组件的两个事件UU和PP,然后又在组件类的构造函数中定义T1和T2的change事件,并在它们的change事件中用_parent.dispatchEvent(eventObj);语句把chang事件发布为组件事件。dispatchEvent()方法需要一个Object类型的事件对象作为参数,该对象中保存了与事件相关的信息:target指明事件广播(发生)的对象;type定义了事件类型的名称——也可以认为是事件名称。在事件脚本中使用如下代码就可以对事件做出响应,其使用方法与一般的事件处理方法一致:

//对组件的PP事件做出响应

on(PP)

{ trace("PP"); }

//对组件的UU事件做出响应

on(UU)

{ trace("UU"); }

组件的属性的改变也可以作为事件发布,例如:

private var Tm:String;

//在setter中发布组件的事件

public function set TTm(val:String)

{

Tm=val;

var eventObj = new Object();

eventObj.type = "KK";

eventObj.target =this;

this.dispatchEvent(eventObj);

}  当然,还要用Event元数据为组件声明事件。但事实上,没有Event元数据声明的事件组件同样可做出响应。Event元数据声明似乎仅仅是多了一个代码提示而已。所以元数据只是为组件提供了一个更加友好的用户接口,使开发人员更加容易得使用组件。

  在发布组件之前,还可以为组定制一个图标。图标大小要求为 18 x 18 像素,并保存为 PNG 格式。它的 Alpha 透明度必须是8位,左上角的像素要求是透明的,以支持遮罩。另外还需要在组件类文件中定义添加元数据声明:

  [IconFile("component_name.png")]

  该声明和事件声明一样,必须放在类定义之前,使该声明作用到组件类。最后将该图像保存到到FLA文件所在的同一目录中。在导出 SWC 文件时,Flash将在自动包含该图像。

  当组件定义完整,测试通过后,就可以发布组件供其他开发人员使用。Flash MX 2004 将组件导出为组件包(SWC 文件)。在发布组件时,只需向其他开发者提供 SWC文件就可以了。此文件包含与组件相关的所有代码、SWF 文件、图像和元数据,因此其他开发者可以方便地将它放到自己的 Flash开发环境中。

  这里对Flash V2组件开发做了初步的讨论。在具体的开发时,应根据组件的功能特性非常细致地刻画组件的属性、事件和方法,声明元数据定义良好的用户接口。如果该组件是一个可视的组件还需要为组件制作组件界面的图形元素。

时间: 2024-08-26 22:18:26

Flash MX Professional 2004 V2组件的开发的相关文章

Flash MX 2004视频文件轻松播

我们用Flash制作课件时,经常要插入大体积的视频文件,直接在Flash中完成.导入视频文件的时间很长,.fla源文件体积也增大许多.很多朋友只好采用分解的办法,先将视频转为动画,再用命令来加载视频动画,效果也不是非常好.如果Flash能像Authorware等多媒体制作软件那样能直接加载外部视频文件该多好! 现在Flash MX Professional 2004可以对外部的视频文件进行链接,还可以用媒体播放组件对这个视频文件进行灵活的播放控制,唯一不足的就是,不是对我们熟悉的视频文件的支持,

Flash MX 2004时间轴特效详细讲解

特效 今天给大家总结一下Flash mx 2004中的时间轴特效,希望对大家有帮助,并且提供了一个用时间轴做的实例,至于其它的具体简单使用则没给大家实例,希望大家按照说得好好练习下Flash的时间轴特效! 时间轴特效(Timeline effects)是Flash MX 2004和Flash MX Professional 2004都拥有的新功能.使用Flash内建的时间轴特效,可以快速创建复杂的动画,和Swish有些类似. 时间轴特效可以应用于以下对象:文本.图形(包括矢量图.组合对象和图符)

Flash MX 2004新功能:行为

Behavior(行为)和行为面板在Dreamweaver中早已有了,但在Flash中则是首次引入.在Flash MX Professional 2004中,行为就是预先写好的动作脚本. 使用行为,你无需自己动手编写,就可以给你的Flash文档添加功能强大的动作脚本代码,给Flash内容(如文本.电影剪辑.图像.声音等)添加交互性,实施对文档中的电影剪辑和图像实例的控制. 你也可以使用行为来排列帧中电影剪辑和图像实例的堆叠顺序,装载和卸载实例,播放.停播.复制或拖曳实例,或创建链接.此外,你还可

Flash MX 2004 Media组件实现多首mp3连放

Flash MX 2004 的Media组件确实不错,大家在使用的时候可能发现MediaDisplay组件只能播放一首mp3,如果要让他播放完一首歌曲后再接着播放另一首歌曲就不行了.今天就来给大家介绍一下怎样用MediaController和MediaDisplay组件实现多首mp3的联播. 播放器界面如图: 思路如下: 歌曲列表用一外部XML文件来记录,便于修改.开始的时候定义一XML对象,并载入外部XML文件,载入后再将歌曲列表提取出来放入一数组中.接着用attachMovie()方法将Me

使用外部 CSS 来设置 Flash MX 2004 组件外观

css 编者注:我们都知道可以轻松的设置 Flash MX 2004 组件的外观,但是如果能用一个外部的 CSS 文件来控制,岂不是更好,使用起来就会更加的方便.这里是在网上发现的一个例子(原文网址: http://blogs.flashsupport.com/robert/archive/2004/09/08/209.aspx ): 1. 创建一个 CSS 文件,定义组件的一些属性,如: /* Filename: styles.css */ checkbox { color: 0x0000FF

Flash MX 2004升级 AS改进是重

7月26日,Macromedia公司发布了Flash MX 2004的升级包,该升级包修正了原2004文档中的很多BUG,功能更完善,以下节选自Macromedia关于该升级版Flash MX 2004文档的最新改进的描述: 增加了400多个新的代码范例 将ActionScript语言参考示例的个数百分比从43%增长到98% 增加ActionScript文档大小到85% 增加了21个新的文档范例FLA源文件,进一步证明用FLASH开发通用应用软件的强大功能 修复了2000多个文档BUG 增加了2

Flash MX 2004升级 AS改进是重头戏

7月26日,Macromedia公司发布了Flash MX 2004的升级包,该升级包修正了原2004文档中的很多BUG,功能更完善,以下节选自Macromedia关于该升级版Flash MX 2004文档的最新改进的描述: 增加了400多个新的代码范例 将ActionScript语言参考示例的个数百分比从43%增长到98% 增加ActionScript文档大小到85% 增加了21个新的文档范例FLA源文件,进一步证明用FLASH开发通用应用软件的强大功能 修复了2000多个文档BUG 增加了2

Flash MX 2004新特性

Flash MX的最新版本名命名为Flash MX 2004,分为专门面向设计者的Flash MX 2004和专门面向开发者的Flash MX 2004 Professional. 下面我们分别介绍Flash MX 2004和Flash MX 2004 Professional两个版本的共有特性以及Flash MX 2004 Professional的特性. 具体请访问 Macromedia官方网站介绍http://www.macromedia.com/software/flash/produc

Flash MX 2004滚动文本框的两种做法

文本框 Flash升级到Flash MX 2004 版本以后,许多效果的制作方法都很大的改进,比如滚动文本框的效果制作起来就方便了许多.现在我介绍两种在Flash MX 2004 中制作滚动文本框的方法,一种是利用flash自己的组件,是最简单的一种方法:再一种就是利用一些简单的命令来实现滚动的效果,通过第二种方法我们可以对Flash MX 2004 的新功能与方法有更深刻的了解.文章末尾提供.fla文件供大家下载参考. 完成效果下载 一. 利用组件制作滚动文本框   在场景的空白位置往往不够容