flash 组件应用与开发.doc_第1页
flash 组件应用与开发.doc_第2页
flash 组件应用与开发.doc_第3页
flash 组件应用与开发.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Flash 8组件应用与开发在flash 8中,开发人员开可以在项目中自己创建新的v2组件。在开始开发v2组件之前,首先要了解movieclip类、uiobject类和uicomponent类,因为它们是flash v2组件的基类,所有flash自带的组件都是它们的直接或间接子类。开发一个组件可以从原先的父类继承,扩展现有的组件类,使被创建的组件在父类的基础上进一步扩展。另外,也可以创建一个不带父类的组件,以实现一些其它的功能。在这里将重点讨论如何扩展现有的组件类。扩展一个现有组件类,通常包括以下几个步骤:1、组件首先作为一个电影剪辑(movieclip)被创建,在该电影剪辑中创建两个图层,分别用于组件界面元素和脚本。然后在库的下拉菜单中选择component defination,在该对话框中的as2.0 class中输入该组件所要关联的类的完全限定名。当界面元素定义完成以后,就可以在外部文件中创建组件的属性、事件和方法,当然,组件的界面元素也可以在类中使用代码动态创建。2、在定义组件类文件时,首先必须导入所需要的类,前面已经说过,movieclip类、uiobject类和uicomponent类是v2组件的基类,所以如果当前创建的组件是从v2组件的任意组件扩展,那么就必须了解这三个基类,和其下的相关组件类。关于组件的特性可以查看macromedia公司发布的组件字典,也可以直接在flashinstaldirenfirst runclasses目录查看类文件代码。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 definitioninspectablelist 关键字必须紧挨着类定义且在它之前,因为它应用于整个类。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将在自动包含该图像。当组件定义完整,测试通过后,就可以发布组件供其他开发人

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论