Molehill 2D 研究3

Molehill 2D 研究继续中

 

今天加入几个基本属性:

1.旋转 rotation

2.缩放 scaleX,scaleY

3.透明度 alpha

 

前两个属性毫无压力,使用matrix相关的两个函数,各一条语句搞定了

alpha把我给愁死了,因为对agal的不了解,一下子无从下手

 

到目前为止试了3种方式,都是采用替换掉Texture的方法:

 

1.根据保存的每一帧BitmapData,BitmapData加一个透明的色彩滤镜

sourceBitmapData.applyFilter(sourceBitmapData, sourceBitmapData.rect, new Point(), new ColorMatrixFilter([1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, nodeSprite.alpha, 0]));

再new一个Texture,之后渲染前使用这个new的Texture

实测,此方式效率极低,而且内存占用率也非常高,马上放弃

 

2.每一帧从原先的一个Texture改成两个Texture,第二个是alpha为0.5色彩滤镜得到的BitmapData生成的

因为哪怕我只能做0.5的alpha,使用起来也比无alpha的好很多,因为像一些游戏只需要一种半透明状态即可

实测,效率跟无alpha差不多,出乎意料的是内存占用没比一个Texture的高,所以做了第三种尝试

 

3.每一帧11个Texture,alpha分别是0,0.1...,1.0

然后到时候根据真实的alpha取最接近的值替代,得到最接近的Texture

实测,效率跟无alpha差不多,内存占用没比一个Texture的高

效果如图:

 

 

总结,单单看帧频和内存的话完全达到了很满意的效果,但是有点后怕的地方是,提交的这些Texture是不是缓存在显存当中

这样的话第3种方式还是很不合理的。

 

希望之后能找到怎样用最简单的方式解决alpha问题的方法!

 

补充:刚刚测试方式3时在任务管理器里看到chrome的内存是500多兆,在flash里显示出来只有几兆,真是美好的假象,所以这种方式还是要摒弃的!

继续找方法...

 

想到第4种方法,还是Texture的

默认一帧只有一个Texture,同时保存此帧的BitmapData,如果有alpha小于1的情况时,根据原先的一组帧得到一组新的帧,这些帧里面对应的Texture是alpha处理过的。同时当此显示原件不需要时,清除其内包括Texture的所有数据。目前考虑的结果是这个方式应该比前3个方式都要好。

第5种方法,可以再用类似于第3种方式的分区间取值进行优化。但是不在第一时间全部创建。

 

但是这两种方法在物件多,alpha值多样性的情况下,仍然存在内存高的问题。

你可能感兴趣的:(Molehill研究,matrix,chrome,flash,任务,优化,测试)