Flash中实现卡马克卷轴算法.doc_第1页
Flash中实现卡马克卷轴算法.doc_第2页
Flash中实现卡马克卷轴算法.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2012-07-13#F#la#s#h#中#实#2现01卡2-马07-克13卷#轴#算#法#2012-07-13#陈 舒 娅 1 温 小 琴 2(1赣南师范学院数学与计算机科学学院 江西 赣州 341000;2赣南师范学院教育科学学院 江西 赣州 341000)【摘 要 】Flash 开发中经常会遇到图片滚动的问题 ,虽然实现图片的滚动非常简单 ,但利用普通的方法非常消耗 CPU 资 源 。 本 文 通 过 实 例探 讨 在 Flash-AS3 中如何实现卡马克卷轴算法 ,并对算法进行测试 ,测 试 结 果 表 明 CPU 消 耗 确 有 下 降 。【关 键 词 】Flash;AS3;卡 马 克 卷 轴 ;算 法Realize the Carmack Scroll Algorithm in FlashCHEN Shu-ya1 WEN Xiao-qin2(1College of Mathematics and Computer , Gannan Normal University , Ganzhou Jiangxi ,341000;2College of Education Science ,Gannan Normal University , Ganzhou Jiangxi , 341000)【Abstract】It often encounters problems of pictures roll during Flash developments ,the implementation of picture roll is very simple,but CPUresources are hardly consumed by using common method. In this paper, through the Flash -AS3 example of how to realize the Carmack scroll algorithm,the test results show that the CPU consumption has declined.【Key words】Flash ; AS3 ; Carmark scroll ; Algorithm相 关 概 念 介 绍1bitmapData );trace (bitmapdata loaded : + bmd .width + , +卡马克卷轴是世界顶级程序优化大师 ,以及游戏引擎开发领域的 先 行 者 约 翰卡马克所创造的一种平滑卷轴 算 法 。 卡马克算法的主要 思 想 就 是 : 只更新屏幕变化的部分 ,从 而 节 省 渲 染 的 消 耗 , 如 下 图 所示 。bmd .height );var cm: CarmackBMP = new CarmackBMP(bmd, 500,500, 20, 20 );cm.setPositon(60, 60 );cm.scrollTo(- 400, - 450 );addChild(cm );var osdSign: Bitmap = new Bitmap (new BitmapData(500, 500, false, 0x00ff00 ) ); osdSign.x = 60; osdSign.y = 60; osdSign.alpha = 0.25; addChild(osdSign );stage.addEventListener (MouseEvent.MOUSE_MOVE, onMove );var v: Point = new Point();function onMove(e: Event): voidv.x = (stage.mouseX - stage.stageWidth / 2) /50;v.y = (stage.mouseY - stage.stageHeight / 2) /50 ;cm.scroll(0, 11 );卡马克算法的实质就是建立一块略大 于屏幕的缓冲区域 ,将 显 示数据写入缓冲区 。 当屏幕移动到新位置时 ,会产生如上图所示一样的 分 布 ,可以看到在中心部分 ,地图滚动前和 滚动后两者是完全一样的 , 只有边缘部分被改变了 (也就是我们的缓冲区 )。 那么将这部分不需要 的区域砍掉以后 ,绘制上新的内容 ,就 可 以 达 到 内 存 重 用 ,并 且 减 少 渲 染区域的目的了 。2 Flash-AS3 中卡马克卷轴算法的实现 在 Flash-AS3 中实现卡马克卷轴算法 ,与在其它语言中实现略有 不 同 。因 为 Flash-AS3 并未提供直接操作内存与直接渲染屏幕的 API, 所 有的元件都已经封装了底层 。 而刷新屏幕的操作只有自动渲染 (enterFrame) 与 事 件 渲 染 (updateAfterEvent), 此 例 中 用 事 件 渲 染 , 其 关 键代码如下所示 :public function TestCarmark(): voidstage.scaleMode = StageScaleMode.NO_SCALE; var loader: Loader = new Loader(); loader.load(new URLRequest(touhou.jpg ) );stage.addEventListener(Event.ENTER_FRAME,onEnterFrame );function onEnterFrame(e: Event): voidcm.scroll(v.x, v.y );实 现 步 骤 为 :1)创建一个略大于屏幕的 bitmapdata,对缓冲区进行遮罩 。2) 滚动时判断是否抵达了缓冲区边缘 ,bitmapdata.scroll 方法将整个像素反向回滚 。如果达到则使用 3)滚动的同时将产生空白区域 ,也就是准备填入新数据的地方 。4)在空白区域填入新数据 。5)将 bitmap 再 次 反 向 回 滚 ,以给用户产生画面连续移动的错觉 。通过这一系列动作的目的就是让屏幕上滚动的图像只有显示区 loader.contentLoaderInfo.addEventListenerCOMPLETE, onLoaded );private function onLoaded(e: Event): void(Event.域 (OSD)与 缓 冲 区 (BUFFER),大大缩小滚动面积 。2012-07-13#v#ar #bm#d: #Bit#ma#pD#ata#=#B#itm#apD#ata#(e.#targ2et.0con1ten2t. -307运 行-程1序3并#测#试#C#PU#的#消#耗#2012-(0下7转 第-71283页#) #嵌入式应用程序优化的一般原则与方法研究陈卉娥(常州工程职业技术学院江苏 常州213164)【摘 要 】本文主要讨论了嵌入式应用程序为什么要进行优化的问题 ,并给出了一般的优化原则和方法 。【关 键 词 】嵌 入 式 系 统 ;程 序 设 计 ;优 化 ;代 码 优 化程序优化是指软件编程结束后 ,利 用 软 件开发工具对程序进行调 整 和 改 进 ,让程序充分利用资源 , 提 高 运 行 效 率 , 缩减代码尺寸的过 程 。使用周期短的指令代替周期长的指令 ,以降低运算的强度 。全局变量与局部变量 少 用 全 局 变 量 ,多 用 局 部 变 量 。 全局变量是放在数据存储器中的 ,42而局部变量则大多定位于 MCU 内部的寄存器中 。 在 绝 大 多 数 的 MCU中 ,使用寄存器的操作速度比数据存储器快 ,指 令 也 更 灵 活 ,有 利 于 生 成质量更高的代码 。1对嵌入式应用程序进行优化的必要性 嵌 入 式 系统由于受功耗 、成本和体积等因素的制约 ,对 程 序 运 行的空间和时间要求更为苛刻 。 因 此 ,对于嵌入式系统 ,我们通常会在不 改变程序功能的情况下 ,通过修改原来程序的算 法 、结 构 ,并 利 用 软 件开发工具对程序进行改进 ,使修改后的程序 运行速度更高或代码尺寸 更 小 ,以满足嵌入式应用的性能需求 。43减少或避免执行耗时的操作 常见的耗时操作有 :输 入 /输 出 操 作 、 文 件 访 问 、 图形界面操作和 系 统 调 用 等 。44内联函数和内嵌汇编 对性能影响大的重要函数可以使用关键字 _inline 内 联 , 会 省 去2嵌入式应用程序优化的方法 调用函数的开销 ,负面影响是增加了代码尺寸 。 程序中对时间要求苛 刻的部分可以用内嵌汇编来编写 ,通常可以带来速度上的显著提高 。程序优化可分为运行速度优化和代码尺寸优化 。 运行速度优化是 指在充分掌握软硬件特性的基础上 ,通 过 应 用程序结构调整等手段来 缩短完成指定任务所需的运行时间 ;代 码 尺 寸优化则是指应用程序在 能够正确实现所需功能的前提下 ,尽 可 能 减 小程序的代码量 。 实 际 应用 中 ,这两者往往是相互矛盾的 ,为 了 提 高 程 序 运 行 速 度 ,就 要 以 增 加 代 码 量 为 代 价 ;而为了减小程序代码尺寸 ,可能又要以降低程序运行 速 度 为 代 价 。 因 此 ,在对程序进行优化之前 ,应根据实际需要来制定具 体 的 优 化 策 略 。 随着计算机和微电子技术的不 断 发 展 ,存 储 空 间 已 不 再是制约嵌入式系统的主要因素 ,因此本文主要讨论运行速度优化 。查 表 代 替 计 算在程序中尽量不进行非常复杂的运算 ,如浮点数的开方 。 对 于 这 些消耗时间和资源的运算 ,可以采用空间换取 时 间 的 方 法 。 预 先 将 函数 值 计 算 出 来 ,置于程序存储区中 ,以 后 程 序 运行时直接查表即可 ,减小了程序执行过程中重复计算的工作量 。45使用针对硬件优化的函数库 Intel 公 司 为 XScale 处 理 器 设 计 的 GPP IPP 库 ,针对多媒体处理 、 图形处理和数值运算的一些典型操作和算法 进行了手工优化 ,可 以 很 好 地 发 挥 XScale 硬件的计算潜能 ,达到很高的执行效率 。46嵌入式程序优化遵循的原则 3利 用 硬 件 特 性为了提高程序的运行效率 ,要 充 分 利 用 硬件特性来减小其运行开 销 ,例如减少中断次数 、利 用 DMA 传 输 方 式 等 。47嵌入式程序优化主要遵循以下 3 个 原 则 。31 等 效 原 则 :优化前后程序实现的功能一致 。有 效 原 则 :优化后要比优化前运行速度快或占用存储空间 小 ,或32结 论5二 者 兼 有 。33 经 济 原 则 :优化程序要付出较小的代价 ,取得较好的结果 。综 上 所 述 , 优化的过程是在透彻了解软/ 硬件结构和特性的 前 提下 ,充分利用硬件资源 ,不断调整程序结构使之趋于合理的过程 。 其 目 的是最大程度发挥 处 理 器 效 能 ,最大限度利用资源 ,尽可能提高程序 在特定硬件平台上的性能 。 随着嵌入式技术在通信及消费电子等行业 中的应用日趋广泛 ,优化技术将在嵌入式应 用程序设计过程中发挥越 嵌入式程序优化的主要方面 4嵌 入 式程序的优化分为 3 个 方 面 :算法和数据结构优化 、编 译 优化以及代码优化 。 其 中 ,代码优化是最直接最有效的一种方式 。代 码 优 化 ,就是采用汇编语言或更精简 的程序代码来代替原有的 代 码 ,使编译后的程序运行效率更高 。 以 下 是一些常用的代码优化技 术 和 技 巧 。科来越重要的作用 。责 任 编 辑 :张 慧 代 码 替 换41( 上 接 第 722 页 ) 一个合格的程序员应该总 是千方百计的降低 CPU 的 消 耗 ,而不是用硬件发展很迅速这样的理由去逃避 。 经 过 测 试 , 采用卡马克算法后 , 巨大图像的滚动 ( 如 8000*8000), 在 不 同 的 机 器 上有不同的表现 ,E5200 的 机 器 上 ,多 次 检 验 ,平均消耗都有下降 , 另外测试的效果与内存读取速度也有关系 。【参 考 文 献 】1奚 焱,李 欣 坤.基 于 Flash ActionScript3.0 的运动物体模拟J. 电脑编程技巧与 维 护 ,2010(18)2谭 武 . 探 索 基 于 Flash 技 术 的 RPG 游 戏 创 作 过 程 J. 信 息 与 电 脑 :理 论 版 ,2009(7)4总 结作 者 简 介 : 陈 舒 娅 (1983.01),女 ,汉 族 ,江 西 赣 州 人 ,讲 师 ,硕 士 学 历 , 研究方向为网络信息安全 、计算机应用等方面 。温 小 琴 (1981.04),男 ,汉 族 ,江 西 赣 州 人 ,讲 师 ,硕 士 学 历 ,研 究 方 向 为 网 络 通 讯 、计算机软件应用等方面 。一 张 3000*600 的 位 图 以 60fps 滚 动 会 占 用 掉 10% 以 上 的 CPU,所 以 本 文 在 Flash 中 实 现 卡 马 克卷轴算法以降低

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论