- 浏览: 1084546 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (695)
- 心情日记 (14)
- AS开发工具 (12)
- 文章转载 (99)
- AIR (5)
- 问题总结 (46)
- SWF格式 (7)
- 测试总结 (10)
- 外文资料 (9)
- 算法技术 (33)
- AS3常用开源库 (43)
- 源码范例 (102)
- FLEX (72)
- FLASH 优化 (33)
- 游戏开发 (49)
- 开发技术 (11)
- 工作应用 (34)
- AS3收集 (140)
- WebBase (0)
- 开发构想 (4)
- 设计模式 (2)
- 框架和框架范例 (19)
- RED5 (3)
- java开发 (3)
- JAVA (1)
- FLASH-3D (23)
- 3D (6)
- 书籍 (10)
- 业界信息资料 (3)
- C# (1)
- JavaScript (12)
- HTML5 (6)
- Flixel (1)
- D5Power RPG网页游戏引擎 (0)
- ColorMatrixFilter - 获得相应颜色的色调 函数 (0)
- Starling (0)
最新评论
-
老顽童203:
字体
水果忍者鼠标跟随特效制作[转载] -
hairball00:
[转] 放出超多的Flash组件源代码 -
he74552775:
flash AS3 RegExp简单功能用法(转) -
hanshuai1232000:
第四点,有利也有弊,等你做了大型的aprg,你就知道了
[转]位图数据内存优化 -
yangfantao:
太感谢
[转] 放出超多的Flash组件源代码
http://bbs.9ria.com/viewthread.php?tid=77376&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000
今天中午针对3种知道的位图渲染角色动画的实现方法进行了性能测试,这三种方法分别是:
copyPixels,mask和scrollRect
测试素材:800*600位图文件一张
测试方法:对同屏100个对象不停进行渲染,观察CPU和内存的占用情况。渲染速度30FPS
先说下主要的渲染思路:
copyPixels
指定一个缓冲区变量buffer,将其设置为bitmap的bitmapData属性或者设置为Sprite的beginBitmapFill填充对象,之后,从源位图文件中复制对应的像素到buffer中。
类代码如下:
mask
将源位图作为bitmapData,定义一个Bitmap对象,然后在sprite绘制一个矢量区域,来做为遮罩,之后更改Bitmap的坐标,来实现动画。类代码如下:
scrollRect
创建一个Bitmap对象,通过修改其 scrollRect属性来更改当前的显示区域。类代码如下:
最后,通过主函数在屏幕上同时渲染100个。
运行结果如下:
先来看scrollRect的
再来看mask的
最后来看copyPixels的
其实在运行前,我以为mask的速度会最快,因为只是改动了位图的XY坐标而已,比其他的多了一个mask出来。但是,实际上它的性能跟scrollRect不相上下,怀疑是不是底层是同一实现方法。而copyPixels则稳居第一。只有10%左右的CPU占有。
完毕,上源码。欢迎各路兄弟丢斧头。。。
今天中午针对3种知道的位图渲染角色动画的实现方法进行了性能测试,这三种方法分别是:
copyPixels,mask和scrollRect
测试素材:800*600位图文件一张
测试方法:对同屏100个对象不停进行渲染,观察CPU和内存的占用情况。渲染速度30FPS
先说下主要的渲染思路:
copyPixels
指定一个缓冲区变量buffer,将其设置为bitmap的bitmapData属性或者设置为Sprite的beginBitmapFill填充对象,之后,从源位图文件中复制对应的像素到buffer中。
类代码如下:
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Point; import flash.geom.Rectangle; /** * ... * @author D5Power */ public class ShowObjectCP extends Bitmap implements Render { private var buffer:BitmapData; private var _source:BitmapData; public function ShowObjectCP(source:BitmapData) { buffer = new BitmapData(40, 40); _source = source; super(buffer); } public function render():void { buffer.copyPixels(_source, new Rectangle(int(760 * Math.random()), int(560 * Math.random()), 40, 40), new Point()); } } }
mask
将源位图作为bitmapData,定义一个Bitmap对象,然后在sprite绘制一个矢量区域,来做为遮罩,之后更改Bitmap的坐标,来实现动画。类代码如下:
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; /** * ... * @author D5Power */ public class ShowObjectXY extends Sprite implements Render { private var masker:Sprite; private var b:Bitmap; public function ShowObjectXY(bitmap:BitmapData) { masker = new Sprite(); masker.graphics.beginFill(0); masker.graphics.drawRect(0, 0, 80, 120); addChild(masker); b = new Bitmap(bitmap); addChild(b); b.mask = masker; } public function render():void { b.x = -int(760*Math.random()); b.y = -int(560*Math.random()); } } }
scrollRect
创建一个Bitmap对象,通过修改其 scrollRect属性来更改当前的显示区域。类代码如下:
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; /** * ... * @author Howard.Ren */ public class ShowObjectSC extends Bitmap implements Render { private var rect:Rectangle; public function ShowObjectSC(bitmap:BitmapData) { super(bitmap); rect = new Rectangle(0, 0, 80, 120); scrollRect = rect; } public function render():void { rect.x= int(760*Math.random()); rect.y = int(560 * Math.random()); scrollRect = rect; } } }
最后,通过主函数在屏幕上同时渲染100个。
package { import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; /** * ... * @author Howard.Ren */ public class Main extends Sprite { private var list:Array; public function Main() { list = new Array(); var source:BitmapData = new map(0,0); for (var i:uint = 0; i < 100; i++ ) { var obj:ShowObjectCP = new ShowObjectCP(source); obj.x = int(Math.random() * stage.stageWidth); obj.y = int(Math.random() * stage.stageHeight); addChild(obj); list.push(obj); } addEventListener(Event.ENTER_FRAME, doit ); } private function doit(e:Event):void { for each(var obj:Render in list) { obj.render(); } } } }
运行结果如下:
先来看scrollRect的
再来看mask的
最后来看copyPixels的
其实在运行前,我以为mask的速度会最快,因为只是改动了位图的XY坐标而已,比其他的多了一个mask出来。但是,实际上它的性能跟scrollRect不相上下,怀疑是不是底层是同一实现方法。而copyPixels则稳居第一。只有10%左右的CPU占有。
完毕,上源码。欢迎各路兄弟丢斧头。。。
发表评论
-
[转] Actionscript项目嵌入图片(设置九宫格缩放)
2011-07-27 02:04 2352我们知道在Flex项目中,嵌入外部图片,可以使用 [E ... -
8款bitmap操作类
2011-07-15 11:38 08款bitmap操作类Bitmap在我们的开发中使用率很 ... -
[转] 加载SWF时一些有趣的测试
2011-06-30 21:57 1286这几天做了一个关于加载和内存变化.以及被加载文件的清除的测试; ... -
[转] 关于获取“焦点”及flash播放器“最小化”心得!
2011-05-18 17:26 0研究了下,当运行的flash播放器,如何获取焦点问题。 也是大 ... -
AS3 ADDCHILD 的又一个BUG
2011-05-15 01:02 0AS3 ADDCHILD 的又一个BUG packa ... -
关于事件冒泡, 只要进入形成了显示列表树的对象们中的一个子节点发出事件就一定会走DOM事件机制
2011-04-19 00:31 0关于事件冒泡, 只要进入形成了显示列表树的对象们中的一个子节 ... -
[心得] 关于BitmapData.draw()效率的一点发现
2011-03-23 18:55 0SP位图引擎制作中,目前刚写完MC逐帧转连续BitmapDa ... -
FP10.1的绘制对比测试
2011-03-08 13:41 0http://ghostcat.googlecode.com/ ... -
[转]10万个浮点数排序 算法效率
2011-03-06 00:34 1953http://bbs.9ria.com/viewthread. ... -
[转]ApplicationDomain.currentDomain的细节
2011-02-25 21:09 2775http://flashteam.tencent.com/po ... -
FLASH的包内类的静态变量的默认值无法是包外类
2011-02-25 03:47 0FLASH的包内类的静态变量的默认值无法是包外类 -
[转]区别AS3.0中MOUSE_OVER、ROLL_OVER,MOUSE_OUT、ROLL_OUT
2011-02-25 00:23 1186http://www.yaotaiyang.com/lates ... -
遍历移除时,不要用while(numChildren==0)这是因为在时间轴上是允许某个元件为null,且占据numChildren的一个位置.
2011-01-30 23:55 0另外遍历移除时,不要用while(numChildren==0 ... -
FOR EACH 遍历数组 是按照顺序来遍历的
2010-12-20 20:02 4910FOR EACH 遍历数组 是按照顺序来遍历的 v ... -
Sprite graphics 的极限位置的测试, 105000000
2010-12-20 01:26 0var sp:Sprite = new Sprite() ... -
[心得] FLASH自带的HASHMAP慢的一塌糊涂啊 千万不要使用 超长的STRING类型的KEY
2010-12-07 12:16 2063var dic:Dictionary = new Di ... -
AS3深拷贝的一个测试总结
2010-10-12 22:50 1255package { import flash. ... -
FLASH 数组 POP PUSH UNSHIFT SHIFT测试
2010-09-25 13:59 2116博客地址:http://as3.iteye.com/admin ...
相关推荐
然而,即使采用了这些优化手段,大型位图的滚动仍可能在不同硬件上表现出性能差异。例如,一个3000x600像素的位图以60fps滚动可能会占用10%以上的CPU。因此,开发者可能需要尝试更多的优化策略,比如像素滚动和更...
1. **精灵动画**:通过改变源位图的nXSrc和nYSrc参数,可以实现精灵帧的切换,从而制作出连续的动画效果。 2. **背景滚动**:通过调整nXDest和nYDest,可以实现背景的平滑滚动,给人一种无限延伸的感觉。 3. **...
总的来说,内存画布和双缓冲技术是提高图形用户界面性能的有效手段,尤其在处理动态图形和动画时,能显著提升用户体验。在VC6环境下,通过熟练掌握这些技术,开发者可以创建出更加流畅、无闪烁的图形应用程序。
性能方面,绘制大量图形或实现复杂动画时,应当注意以下几点来优化Canvas的性能: - 将多个绘图操作合并(batching),减少绘图调用次数。 - 避免不必要的画布状态改变,因为这会导致重绘整个画布。 - 只渲染屏幕上...
下面介绍几种核心的技术及其应用场景: ##### Canvas - **绘制几何图形**:通过`canvas.getContext("2d")`获取2D渲染上下文,进而可以绘制各种几何形状。 - **绘制位图**:利用`drawImage`方法可以直接将位图加载到...
6. **性能优化**:由于翻页动画可能会消耗大量计算资源,因此需要考虑性能优化,比如使用位图缓存、减少不必要的重绘等。 7. **兼容性和适应性**:考虑到不同设备和浏览器的差异,可能需要做相应的适配,确保在各种...
为了提高SVG图像的加载速度和渲染性能,可以采用以下几种方法进行优化: - **减少SVG文件大小**:通过删除不必要的注释、空白字符以及压缩SVG代码来减小文件大小。 - **使用SVG符号库**:利用 `<symbol>` 和 `<use>`...
6. **性能优化**: 由于自定义绘制会增加计算和渲染负担,我们需要优化代码,避免不必要的重绘,例如使用硬件加速,或者在不需要更新圆角时缓存位图。 在提供的"UniversalImageView"文件中,可能包含了这个自定义...
GIF是一种常见的位图格式,常用于互联网上的动画图片。 2. JPEG支持:voImage也支持JPEG(Joint Photographic Experts Group)格式,这是一种广泛使用的有损压缩图像格式,适用于高质量的照片和图像。 3. 其他格式...
微型嵌入式GUI是一种在资源受限的嵌入式设备上实现图形用户界面(GUI)的技术。这个标题提及的资源包包含C语言编写的源代码和相关的学习资料,可以帮助开发者理解和构建自己的微型GUI系统。嵌入式GUI对于那些需要...
Canvas是一种基于Web的绘图技术,允许JavaScript代码在HTML的canvas元素中进行图形和动画操作。通过使用canvas的API,开发者可以在网页上绘制图形,实现图像合成等效果。它的一个重要特性是可以将HTML元素渲染为位图...