`
咖啡舞者
  • 浏览: 128724 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

[转]FLEX2/ACTIONSCRIPT3 的反射

    博客分类:
  • FLEX
阅读更多
在ActionScript 3中,你会发现在flash.utils包中有一系列函数提供了反射的功能。主要包含以下功能:

    * 确定对象的类
    * 获取类的成员、方法、构造函数、父类的信息
    * 确定接口声明的常数和方法
    * 在运行时根据类名创建类的实例
    * 在运行时根据成员名称获取或者设置对象成员的值
    * 在运行时根据方法名称,调用对象的方法

你可以使用类似于"describeType"之类的功能,它返回一个Xml对象。举一个例子:

package {
    import flash.display.Sprite;
    import flash.utils.describeType;
   
    public class DescribeTypeExample extends Sprite {
        public function DescribeTypeExample() {
            var child:Sprite = new Sprite();
            var description:XML = describeType(child);
            trace(description..accessor.@name.toXMLString());
        }
    }
}


如果你想进一步,根据类名创建对象的实例,我们可以使用"getDefinitionByName()"
package {
    import flash.display.DisplayObject;
    import flash.display.Sprite;
    import flash.utils.getDefinitionByName;

    public class GetDefinitionByNameExample extends Sprite {
        private var bgColor:uint = 0xFFCC00;
        private var size:uint = 80;

        public function GetDefinitionByNameExample() {
            var ClassReference:Class = getDefinitionByName(“flash.display.Sprite”) as Class;
            var instance:Object = new ClassReference();
            instance.graphics.beginFill(bgColor);
            instance.graphics.drawRect(0, 0, size, size);
            instance.graphics.endFill();
            addChild(DisplayObject(instance));
        }
    }
}


尽管这是一些非常方便的方法,但是在FlashPlayer中使用反射还是会有许多的限制,因为缺乏运行时的动态源码编译。上面的功能对于那些在内建的类,比如:Sprite类来说无疑是有用的,但是对于自定义类来说,我们会遇到很多麻烦。比如:

package {
    import com.customtypes.string; // Custom String Implementation Class
    import flash.utils.getDefinitionByName;

    public class GetDefinitionByNameExample {
        public function GetDefinitionByNameExample() {
            var ClassReference:Class = getDefinitionByName(“com.customtypes.string”) as Class;
            var instance:Object = new ClassReference();
            instance.customParameter = “my parameter”;
        }
    }
}


尽管我们使用了import语句,但是"getDefinitionByName()"还是会失败。原因上面已经说过了,在运行时编译源代码是不允许的。也许以后可以。在目前情况下,要实现上述功能,至少要在代码中初始化一个类的实例。也就是声明一个类的实例:

var customType : com.customtypes.string;


分享到:
评论

相关推荐

    ActionScript教程 Flex教程 ActionScript+Flex教程

    ### ActionScript与Flex教程知识点概览 #### 一、ActionScript简介 - **定义与历史**:ActionScript是一种面向对象的脚本语言,主要用于增强Adobe Flash Player和Adobe AIR中的交互性和功能。它最初由Macromedia...

    flex/flash 3d基础1

    在Flash和Flex中,3D渲染主要依赖于ActionScript 3.0,这是一个面向对象的编程语言,用于编写运行在Flash Player或Adobe AIR上的交互式内容。在这个案例中,"Figure"可能是一个用ActionScript编写的3D对象,它可以是...

    flex3d实例

    Flex 3D支持多种光照类型(如点光源、平行光等)和材质属性(如颜色、镜面反射、环境贴图等),让3D模型更具真实感。 5. **动画和交互**:Flex 3D提供了丰富的动画控制机制,可以创建平滑的3D过渡效果。同时,用户...

    Flex 反射示例

    在Flex中,ActionScript 3.0提供了反射API,主要由`flash.utils`包下的`getQualifiedClassName`、`getQualifiedSuperclassName`、`getDefinitionByName`、`describeType`等函数组成。 2. **核心API**: - `...

    flex 超炫的3d效果+源码

    Flex是Adobe公司开发的一种基于ActionScript的开源框架,主要用于构建富互联网应用程序(RIA)。它提供了丰富的用户界面组件和强大的数据绑定功能,使开发者能够创建出交互性极强的Web应用。在本压缩包中,"超炫的3D...

    Flex 3D圆形隧道效果

    Flex是由Adobe开发的一种基于ActionScript 3.0的开源框架,用于构建具有丰富用户界面的Flash应用程序。在Flex中实现3D效果,可以让开发者创建出更为生动和立体的交互体验。 在Flex中实现3D圆形隧道效果,需要掌握...

    Flex控制SWF播放

    Flex是一种基于ActionScript 3的开源框架,主要用于构建富互联网应用程序(RIA)。它提供了丰富的用户界面组件和强大的数据绑定机制,使得开发人员可以轻松地控制SWF文件的交互性。 首先,让我们理解SWF文件。SWF是...

    FLEX AWAY3D DEMO

    通过Flex3d这个子目录,我们可以推测DEMO中可能包含了一系列与Flex相关的源代码文件,如MXML和AS3文件。Flex是基于ActionScript的开发框架,用于构建RIA,它提供了丰富的UI组件和事件处理机制,使得开发者可以更加...

    flex开源项目介绍.doc

    Flex是一种用于构建富互联网应用程序(RIA)的开源框架,它基于ActionScript 3(AS3)编程语言和MXML标记语言。这些开源项目为开发者提供了丰富的组件库、工具和框架,帮助他们扩展Flex的功能,提高开发效率,并实现...

    PV3D的开源代码(flash actionscript)

    ActionScript 3.0是Adobe Flex和Flash开发中的主要编程语言,相较于早期版本,它有显著的性能提升和更严谨的面向对象特性。ActionScript 3.0引入了强类型、类和包的概念,使得代码更加模块化和可维护。在PV3D项目中...

    Flex前端与Java服务端交互反射机制.doc

    《Flex前端与Java服务端交互反射机制》 在软件开发中,前端与后端的交互是必不可少的一部分。本文主要探讨了使用Flex作为富互联网应用程序(RIA)前端与Java服务端进行交互的反射机制。Flex以其丰富的用户体验和...

    spring actionscript 必须的.swc包

    4. **as3commons-lang.swc**:这是AS3 Commons库的一部分,提供了一些ActionScript 3标准库中没有的实用工具类,包括字符串处理、集合操作、反射等功能,增强了ActionScript的实用性。 5. **as3commons-reflect.swc...

    flex3d特效

    2. **Flex3D的主要特性**: - **3D对象和场景**:Flex3D允许创建、旋转、缩放和移动3D对象,同时可以构建和管理复杂的3D场景。 - **光照和材质**:支持多种光照模型和材质效果,如漫射、镜面反射、环境光等,增强...

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    然后,打开 Flex Builder 3,创建一个新的 Flex Project,命名为 EmployeeMgmt-Flex: 图 3. 新建 Flex 工程 - 第一步 Flex Project 需要指定 Server 端的配置文件地址: 图 4. 新建 Flex 工程 - 第二步 ...

    Flex 3D自己学习过程中的例子

    Flex 3D是一种基于Adobe ...同时,你还需要学习相关的Flex SDK和ActionScript 3.0知识,以便更好地理解和修改代码。记住,动手实践是学习任何技术的最佳途径,所以尝试运行和调试这些示例,以加深对Flex 3D的理解。

    Away3D学习02场景SkyBox和反射

    2. 将这个材质应用到需要反射的物体上。 3. 设置反射映射(ReflectionMap)。这可能是一个专门的反射纹理,或者是实时捕捉场景的动态反射。 4. 调整反射强度、模糊度等参数以达到理想效果。 在实际应用中,我们可能...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    为了能完成自动生成 RemoteObject 对象,我编写了一个 Java2ActionScript 的 Ant 任务来自动转换 FlexService 接口以及相关的所有 JavaBean。JavaInterface2RemoteObjectTask 完成一个 Java 接口对象到 RemoteObject...

    C#与flex交互

    - C#可以通过反射或委托机制来调用Flex中的方法。在C#端创建一个委托,对应Flex中的方法签名,然后在需要调用Flex方法时,通过Flash控件发送消息到Flex端,由Flex端的事件监听器接收并执行相应的方法。 5. **通信...

    flex特效编辑器 开发flex游戏的利器

    在学习和使用Flex特效编辑器时,开发者应掌握基本的Flex编程知识,了解ActionScript和MXML,这是Flex应用程序的基础。同时,熟悉图形设计和动画原理也是必要的,这将有助于创造出更具艺术感的特效。 总而言之,Flex...

Global site tag (gtag.js) - Google Analytics