在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 3.0和Flex的视频教程涵盖了从入门到精通的不同层次,适合初学者快速上手。 - **书籍资料**:《ActionScript 3.0殿堂之路》、《高级ActionScript 3.0设计模式》等书籍深入讲解了高级...
ActionScript 3.0是Adobe Flex和Flash开发中的主要编程语言,相较于早期版本,它有显著的性能提升和更严谨的面向对象特性。ActionScript 3.0引入了强类型、类和包的概念,使得代码更加模块化和可维护。在PV3D项目中...
Flex反射是Adobe Flex框架中的一个重要特性,它允许在运行时检查和操作类、对象、方法、属性等元数据。在Flex编程中,反射提供了一种动态访问和操作应用程序组件的能力,即使在编译时未知其具体类型的情况下也可以...
Flex是Adobe公司推出的一个开源框架,用于构建富互联网应用程序(RIA),它基于ActionScript 3.0和MXML,提供了强大的用户界面组件库,使开发者可以轻松创建具有交互性和动态性的Web应用。 在这款游戏中,“弹球”...
1. **ActionScript 3.0**:作为Flex 3D的基础,ActionScript 3.0是AS语言的一个重大升级,提供了类型检查、垃圾回收等特性,显著提高了性能和开发效率。在Flex 3D中,开发者通过ActionScript来编写3D对象的交互逻辑...
在Flash和Flex中,3D渲染主要依赖于ActionScript 3.0,这是一个面向对象的编程语言,用于编写运行在Flash Player或Adobe AIR上的交互式内容。在这个案例中,"Figure"可能是一个用ActionScript编写的3D对象,它可以是...
As2Commons是一个基于ActionScript 3.0的开源库,提供了丰富的工具和实用程序,其中包括了对反射的支持。它为开发者提供了一系列API,用于处理类和对象的信息,从而使得开发者能够在运行时动态地访问和修改类的行为...
Flex是由Adobe开发的一种基于ActionScript 3.0的开源框架,用于构建具有丰富用户界面的Flash应用程序。在Flex中实现3D效果,可以让开发者创建出更为生动和立体的交互体验。 在Flex中实现3D圆形隧道效果,需要掌握...
2. **RemoteObject**:Flex中的RemoteObject组件用于调用后端服务,实现数据交互。 3. **LCDS**:作为数据服务中间件,它提供了对Flex和Java之间的AMF数据传输支持。 4. **Spring**:SpringFactory类和反射机制,...
Flex特效示例主要展示了在ActionScript 3.0框架下使用Adobe Flex进行视觉效果和动画设计的各种技术。Flex是一款强大的开发工具,用于构建富互联网应用程序(RIA),它提供了丰富的组件库和强大的图形处理能力,使得...
Flex 3D是一种基于Adobe ...同时,你还需要学习相关的Flex SDK和ActionScript 3.0知识,以便更好地理解和修改代码。记住,动手实践是学习任何技术的最佳途径,所以尝试运行和调试这些示例,以加深对Flex 3D的理解。
- **Adobe Flex**:一个用于构建富互联网应用程序(RIA)的开放源代码框架,基于ActionScript 3.0和Flash Player或Adobe AIR运行时。 - **3D图形渲染**:Flex3D通过Stage3D API实现了3D图形的硬件加速渲染,提高了...
Papervision3D 是一个基于ActionScript 3.0的开源库,专门用于在Adobe Flash平台上构建三维(3D)图形和交互式应用程序。这个教程集合提供了深入学习Papervision3D所需的知识,包括PV3D的基本概念、对象模型、渲染...
Papervision3D就是这样一个强大的开源库,它为ActionScript 3.0开发者提供了在Flash平台上构建三维(3D)图形的能力。 Papervision3D是基于Adobe Flash的3D渲染引擎,它允许开发者在浏览器中创建复杂的3D场景,包括...
- **Papervision3D**是一款针对Adobe Flash平台的开源3D渲染引擎,允许开发者利用ActionScript 3.0在Flash Player环境中创建交互式的三维场景。 - 本书《Papervision3D_Essentials》是一本全面介绍Papervision3D使用...