Flex 与Stage3D 的备忘录

Flex的List组件的ItemRender的一些属性

1.userList.dataGroup.getChildAt(i) as ItemRenderer //List访问ItemRenderer(不符合MVC分离,不建议使用)

2.userList.dataGroup.numChildren //List内的ItemRendere个数

3.itemRenderer.owner //ItemRenderer访问提供data的父组件

 

FlashBuilder建立ActionScript项目并使用stage3D时, 如果报错:

Error #2044: Unhandled ErrorEvent:. text=Error #3702: Context3D not available.

则将app.xml中的下两个参数修改如下:

<renderMode>direct</renderMode>

<depthAndStencil>true</depthAndStencil>

 

FlashIDE对位图使用九宫格scale9

FlashIDE不能直接对位图应用九宫格(没有效果)

需要:

  1. 将位图转换为影片剪辑元件

  2. 将位图打散/分离(breakapart)

  3. 调整好九宫格分割线

  4. 将被划分出的9块图形分别选中, 并修改-组合(Ctrl-G)

进行完以上步骤后, 再在flashIDE中缩放该元件, 就可以看到九宫格缩放效果了

 

AS3 库项目 内部命名空间 库内才可访问的方法属性

通过在库项目中添加命名空间, 并用该命名空间表示特定的属性,方法可以使在库外无法访问这些属性和方法.

从而保持API的精简性.

 

示例:

1.新建inner.as的as文件,并写入

package XXX

{public namespace inner;}

2.在库中不希望被外部访问的属性方法前,用inner修饰符, 例:

arcane var _innerValue:Object;//库外部无法访问, 只能在库内调用

 

private var _privateValue:Object;//库外可以访问

public var _publicValue:Object;//库外可以访问

 

原注释:

The namespace used to enclose properties and methods that should only be available within the Away3D library. This keeps the public API clean and prevents the calling of methods that should never be called manually. 

 

Stage3D性能限制

转载于http://riaoo.com/?p=2556

 

  • AGAL 限制:每个程序 200 个 opcode 

  • 绘制调用限制:每个 Context3D.present() 调用 32768 个 drawTriangles() 调用

  • Context3D.createIndexBuffer() 单个缓冲区中的最大索引数为 524287 

  • Context3D.createVertexBuffer() 单个缓冲区中的最大顶点数为 65535

  • Context3D.createTexture()和Context3D.createCubeTexture()的参数streamingLevels的最大值是 log2(min(width,height)) 

  • Context3D.configureBackBuffer() 缓冲区的最小大小为 50×50 像素 

  • IndexBuffer3D 索引为 16 位无符号整数,即所允许的最大索引值为 65535 (0xffff) 

  • Program3D.upload() 两个参数都必须为Endian.LITTLE_ENDIAN (:程序会在每次调用 Context3D.drawTriangles() 方法时运行顶点着色程序和片段着色程序。顶点程序会为要绘制的三角形列表中的每个顶点执行一次。片段程序会为三角形表面的每个像素执行一次)

  • Context3D.setVertexBufferAt() 顶点着色器所使用数据的最小单位为 32 位数据。距顶点流的偏移量以 32 位的倍数指定(:GPU的寄存器被设计为128位,也就是32+32+32+32,即一个寄存器最多能放4个Number。)

  • VertexBuffer3D 最多可以为每个点提供 64 个 32 位值(256 字节)数据(但在这种情况下,单个顶点着色器无法使用所有数据。Y.Boy注:因为顶点寄存器最大数量才8个,每个是32位,总共才32字节)。即:uploadFromVector() 方法的参数numVertices最大值可以为64。

  • 资源限制 

  • 寄存器数量限制

TweenMax的详细资料

http://blog.5d.cn/user12/dzxz/200809/500547.html

 

 对 MovieClip 进行连续的缓动,先用2秒钟时间让透明度降到 50%,然后用1秒钟时间滑落到 y 坐标为300的位置,使用如下的代码:
 
  import gs.TweenMax;
  TweenMax.sequence(clip_mc, [{time:2, alpha:0.5}, {time:1, y:300}]);
 
 使用 Back.easeOut 函数对影片剪辑 clip_mc 进行缓动,缓动持续 5 秒钟,alpha 值变到 0.5,x 坐标变到 120,延迟 2 秒钟执行,缓动结束后,调用“onFinishTweenusing”,并且为这个函数传递几个参数(数值 5 和 对 clip_mc 的引用),代码如下:
  
  import gs.TweenMax;
  import fl.motion.easing.Back;
  TweenMax.to(clip_mc, 5, {alpha:0.5, x:120, ease:Back.easeOut, delay:2, onComplete:onFinishTween, onCompleteParams:[5, clip_mc]});
  function onFinishTween(argument1:Number, argument2:MovieClip):void {
   trace("The tween has finished! argument1 = " + argument1 + ", and argument2 = " + argument2);
  }
 
 如果舞台上的影片剪辑已经处于期望的缓动结束时位置,而你希望它从其它位置用 5 秒钟的时间回到当前位置,(比如从比当前位置高 100 像素或屏幕外更高的地方,通过改变 y 属性,下落到当前位置)可以使用下面的代码:
  
  import gs.TweenMax;
  import fl.motion.easing.Elastic;
  TweenMax.from(clip_mc, 5, {y:"-100", ease:Elastic.easeOut});  

 

FlashBuilder4.7 与 depthAndStencil

Fb4.7自带的4.6.0版本的sdk的air版本只有3.1, 所以创建的Flex项目的app.xml里面是没有depthAndStencil.

这样会使得Flex手机项目的stage3D场景无法使用深度排序, 表现为模型前后透视错乱. 

而这一BUG在模拟器上无法看到, 只有真机测试时才会出现此情况.

只有将Flex sdk升级到更高版本, 也就是apache flex sdk的任一版本, 才能解决这一问题.

 

AIR 预加载画面

splashScreenImage预加载画面属性

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" splashScreenImage="@Embed('assets/all/startUp.jpg')"/>

 

Flex List 布局(依次排列-纵向)

1
2
3
4
5
<s:List id= "mylist" >
     <s:layout>
         <s:TileLayout requestedColumnCount= "10"  columnWidth= "200"  rowHeight= "220"  horizontalGap= "10"  verticalGap= "10" />
     </s:layout>
</s:List>

 

Adobe Air程序如何定义 某格式文件的默认打开程序

对于文件关联管理,air中的flash.desktop.NativeApplication类提供了4个方法:

isSetAsDefaultApplication(extension:String):Boolean
返回当前AIR应用程序是否是指定文件格式的默认打开方式
参数extension是文件扩展名字符串,不用写”.”,比如”flv”,下面3条的extension一样

setAsDefaultApplication(extension:String):void
使当前应用程序与某种文件格式关联

removeAsDefaultApplication(extension:String):void
移除某个AIR应用程序与文件之间的关联

getDefaultApplication(extension:String):String
报告某个文件所关联的应用程序路径
返回应用程序路径的字符串

文件关联必须要在应用描述文件中声明。当AIR应用程序安装时,运行环境会自动关联相应文件,设置相应格式的文件默认打开方式为你的AIR应用程序。不过,因为AIR安装程序不覆盖任何文件关联,所以已经有别的程序设置为默认打开方式的文件格式是不处理的。
有个良好的习惯做法是:在程序启动时核实你所希望关联的文件格式,也就是核实是否已设置默认打开方式为用该AIR应用程序。毕竟AIR应用程序不覆盖已存在的文件关联,而且别的应用程序可能将你的文件关联修改。如果遇到别的安装程序关联了你需要关联的文件,可以使用setAsDefaultApplication()设置关联,不过最好先得到用户的同意哦.
需要注意的是,AIR只允许管理在应用描述文件中声明了扩展名的文件关联,所以,我们是无法获取未声明的文件类型的关联信息的,而且对所有未声明的扩展名做操作都会导致抛出程序异常。
在应用描述文件中声明文件关联的元素结构如下:

<fileTypes>
<fileType>
<name>adobe.VideoFile</name>
<extension>avf</extension>
<description>Adobe Video File</description>
<contentType>application/vnd.adobe.video-file</contentType>
<icon>
<image16×16>icons/AIRApp_16.png</image16×16>
<image32×32>icons/AIRApp_32.png</image32×32>
<image48×48>icons/AIRApp_48.png</image48×48>
<image128×128>icons/AIRApp_128.png</image128×128>
</icon>
</fileType>
</fileTypes>

 

要用NativeApplication.nativeApplication侦听InvokeEvent事件,具体使用方法在Adobe Air开发文档的第20章:Air应用程序的调用和终止 有详细介绍,开发文档下载地址:http://help.adobe.com/zh_CN/AIR/1.1/devappshtml/devappshtml.pdf

 

Flare3D中多组件模型靠近镜头时, 部分组件消失的解决办法

1
2
3
4
5
6
__content.forEach(
     function  setBounds(m:Mesh3D): void
     {
         m.bounds =  null ;
     },
Mesh3D);

 

 

Flare3D中, 绕Y轴旋转的角度处理

1
2
3
4
var  tarP:Point =  new  Point(tx - fx, ty - fy); //方向
var  rot: Number  = Math.atan2(tarP.y, - tarP.x)/Math.PI *  180 ; //注意符号
rot +=  90 ;
_content.setRotation( 0 , rot,  0 );

 

 

Flex组件自定义事件

AS文件:

[Event(name="myEnableEvent", type="flash.events.Event")] 
public class MyComponent extends UIComponent 

    ... 

MXML文件:

<fx:Metadata> 
    [Event(name="myEnableEvent", type="flash.events.Event")] 
</fx:Metadata> 

你可能感兴趣的:(stage3d)