发现个好东西Flex 3 Posters
As3,Flex3的类图Poster,来源Flex 3 Posters
转载如下:
Poster 1 : 13MB
Poster 2 : 17MB
Poster 3 : 18.7MB
Poster 4 : 13.0MB
Poster 5 : 13.8MB
AS3动态获得类名及类的方法
获得某个实例对象的类:
实例名["constructor"];
实例名.constructor;
获得某个实例对象的类名:
getQualifiedClassName (对象实例名)
进一步解释如下
getQualifiedClassName (value:*)
参数value手册上说:可以将任何 ActionScript 值传递给此方法,包括所有可用的 ActionScript 类型、对象实例、原始类型(如 uint)和类对象。示例如下:
trace(getQualifiedClassName(“abc”)); //输出 String
trace(getQualifiedClassName(1)); //输出 int
根据类名获得类:
getDefinitionByName(完全限定类名称的字符串表达式);
注意,这里的类名称需要有包路径的限定,如”flash.display.Sprite”,也可以这样写”flash.display::Sprite”,自定义的类也一样,当然如果自定义的类在根包,或是在fla的库里定义的类,或者是ActionScript的原始类型,则可以直接写类名字符串。
用得到的类实例化对象:
一般中间要用一个无类型变量传递类,进行实例化;
如:
var i=0;
var c:*=getDefinitionByName(“MyClass”+i);
var myClass:*=new c();
flash10中3D特性之PerspectiveProjection属性设置
PerspectiveProjection类提供了一种在 3D 空间中移动显示对象时应用基本透视的简单方式,它有下列三个主要属性:
fieldOfView 视野属性
projectionCenter 投影中心属性
focalLength 焦距属性
默认的 PerspectiveProjection 对象是基于视野和舞台的高宽比(尺寸)为 root 对象的透视转换定义的框架。要改变透视投影设置,可以通过对root 对象的DisplayObject.transform 属性来更改。但在编程时要改变这些属性,在文档类的构造函数中直接设置是不起作用的,因为这时swf文件还没有完全载入,也就是root显示对象还未完全载入完成,所以要通过this.loaderInfo.addEventListener (Event.COMPLETE, init)方式监听载入完成事件,在swf载入完成后按如下方式来设置:
this.transform.perspectiveProjection.projectionCenter = new Point(0,0);
注:类似的与根显示对象相关的部分其他基本属性的获取和修改都有这个问题需要注意。
要为其他显示对象设置这些透视属性,不能直接用类似上面的DisplayObject.transform.perspectiveProjection.projectionCenter = new Point(0,0)这种直接赋值方式,因为DisplayObject.transform.perspectiveProjection为空,包括root显示对象在内的其他显示对象的透视属性设置可以通过如下方式设置:
var p=new PerspectiveProjection();
p.projectionCenter = new Point(0,0);
p.fieldOfView=55;
DisplayObject.transform.perspectiveProjection=p;
这样你可以为不同的显示对象设置不同的透视投影设置。
关于AS3中预载问题的解决方案
最近在做的一个Flash web交互应用中,所有的交互操作都是由代码控制,元件都是动态的从库中加载到场景中实现的,整个flash场景只有一帧,所有代码都在外部.as文件中,时间轴上无一句代码,虽然最后生成的文件不是很大,但swf预载还是需要实现的,查看了网上关于AS3应用开发中的预载实现,发现大多都不是很完美,有些需要在时间轴的第一帧上加入预载代码,有些用flash隐藏的功能,动态的在第一帧加入代码,而库元件的问题,有些是把在第一帧导入去掉,而在第二帧中隐藏加入所有用到的库元件在场景中…
经过分析和测试,找到一种比较完美的解决方案:
1、将场景分成两帧
2、在发布设置里的flash的脚本设置中,设置类导出在第2帧
3、在文档类的构造函数中写预载代码,类似下例:
this.stop ();//在第一帧停止
loaderInfo.addEventListener (ProgressEvent.PROGRESS, loadProgress);
loaderInfo.addEventListener (Event.COMPLETE, loadComplete);
function loadProgress (event:ProgressEvent):void{
var percentLoaded:Number = event.bytesLoaded / event.bytesTotal;
trace("载入"+ percentLoaded*100 + "%");//可以显示载入进度操作
}
function loadComplete (event:Event):void{
loaderInfo.removeEventListener (ProgressEvent.PROGRESS,loadComplete);
gotoAndStop (2);//载入完成跳到第二帧停止
init ();//进行初始化
}
这样时间轴上不用写任何代码,包括stop()等,所有代码都在外部as文件中,而且由于库元件都在第2帧导入,所以第一帧很小。
注意事项:因为库元件都在第2帧导入,而文档类在第一帧就开始构造了,所以在预加载完成前,不要实例化库中的类,如 new 库元件类(),否则不能正确建立类实例;但可以声明库元件的类变量。
带预载入代码的完整的文档类文件结构如下:
package {
public class 类名 extends MovieClip{
类属性变量声明;//注意不要在这里实例化库中的类,但可以声明库类型的变量
public function 类名(){
stop();
预载处理代码;
预载完成后可以进行库类的实例化操作,或调用应用的初始化方法;
}
其他方法定义;
}
}
