英语原文共 4 页,剩余内容已隐藏,支付完成后下载完整资料
基于脚本语言的片段动画一般解法
摘要: 本文提出了基于脚本的片段动画技术在cocos2d-x引擎上的一般解决方案。它建立了一个基于普通动画的新片段动画系统。它通过动画文件的独立分析获取片段信息,该文件由spriteX工具从J2ME平台编辑和导出,并通过新的动作构造类和动作管理类实现片段动画。然后,它实现了基于lua和c 的交互理论的通用解决方案。最后,sprites片段动画解决方案在节省内存和加快实际机器测试数据的速度方面被证明更好。
关键词:片段动画;精灵分析;LUA
1引言
如今手机的内存有限。当游戏有很多动画时,帧动画中的内存开销很大。而龙骨动画正在结合两个骨骼动画文件实现高品质的动画,因此项目完成是耗时的。有必要优化和提高手机游戏中动画处理的效率。另一方面,由于手机游戏市场的发展,如何快速开发游戏很重要。所以结合这两个需求并使用普通动画和骨架动画的优点,创建了精灵片段动画。在创建精灵片段动画之后,我们封装了一个有效的基于脚本的解决方案,以便为开发人员快速编程。
2片段动画的处理状态
精灵片段动画是一种基于正常帧剪切,组合和绑定片段的技术的动画。sprite-X工具用于根据像他们的区域将字符分解成几个块,如下图。该技术不仅可以减少图片资源占用的空间,还可以在不影响动画的情况下动态替换播放中的任何部分。它还可以控制对象的边缘以实现实时精细碰撞。
图1 通过sprite-X工具和碰撞块索引剪切一个stand字符
3关键技术的实施原则
3.1Sprites Fragment Animation的设计方案
精灵片段考虑节省源内存。sprites片段动画的设计方案如图2所示。首先在渲染后加载由高速缓存中的所有碎片元素组成的整个图像。同时,从处理角色行为逻辑的状态机中提取角色的状态。然后,结合这些属性信息和片段动画文件来获取动作结构。根据动作信息结构读取缓存中的图片,剪切并连接片段。最后,我们通过使用这些框架构建角色来进行一些帧管理和帧调用。
图2 精灵片段动画指定的流程图
3.2分析sprite片段动画文件
整个动作框架的关键点是片段元素的分析和片段拼接信息。相比在帧动画的单二叉树构造中,基于多路树理论的片段拼接信息文档的字节结构看起来更好。使用父片段节点和子树节点,我们可以获得帧结构信息。
图3动画文件中的字节
片段动画文件结构基于多路树理论(图4)。我们逐字节地使用动态数据来解析动画文件并获得片段帧结构信息。动画文件中的字节是固定的(图3)。我们可以轻松获取片段动画信息。
动画文件构造的核心部分包括块框架和动作信息的分布,它们是解析整个动作信息的核心基础。对于片段图片信息,它分配渲染字节段。它组成了大块的信息。帧信息分析更复杂。它包含碎片后每个子帧的所有参考信息,精细碰撞中每个子帧的碎片矩形的分布。最后,动作信息包含整个帧系统中的一些帧作为帧序列数组,并通过动作数组信息获取动作。
4游戏引擎关键技术的底层核心架构
4.1片段动画的核心架构
4.1.1开源引擎的参考
通常2D游戏需要在渲染中绘制大量图形元素。如果我们按图形渲染图形,那么渲染批次将增加,并且引擎效率将会大大减少。cocos2d-x中的CCSpriteBatchNode类特别减少了渲染批次。cocos2dx中的CCTextureCache是CCTexture2D的容器,用于缓存CCTexture2D对象。所以我们在加载场景时从内存池中获取纹理对象。
4.1.2核心结构过程
首先,我们使用CCFileUtils类中的接口来读取文件并获取字节流。接下来,使用单例类SpriteManager读取字节流,以管理类SSprite中纹理布局信息的获取,删除,刷新和加载操作。其次,根据动态字节流,本文构建了处理动作数据类SSprite。它创建了一些sprite对象,我们自己分析了纹理布局信息。因此,我们可以通过有效地创建多精灵对象来构建一个完整的框架。它提供了由我们自己构建的动作信息结构,用于sprite片段动画渲染管理类sprAnimation。最后,sprAnimation类完成了动画架构的逻辑控制。sprAnimation类继承自CCSpriteBatchNode。它正在绘制和组合动作框架。它将一些片段的sprite对象渲染到缓存中以进行批处理并提高渲染效率。在加载游戏场景之前,我们从CCTextureCache池中获取缓存的片段纹理对象,以构造sprite对象实例,并形成动作帧所需的sprite片段对象数组。另一方面,sprAnimation类也负责管理动作框架的游戏。它使用向量容器来管理由片段精灵对象实例数组构造的每个帧。这使我们能够控制片段帧,补充,刷新,播放,中断和跳过帧操作。
图4 片段动画核心结构
4.2精灵片段动画的关键模块
4.2.1用于文件解析模块的类SSprite
SSprite文件解析模块为操作文件的分析设置API。在这个模块中,我们在文件编辑动作中优化文件字节,动作信息的宽度从一个字节扩展到四个字节,从而可以使用更复杂的动作序列组合。文件读取方法,不仅可以在完成文件解析数据时减少内存消耗,而且可以使批处理文件时类更加灵活统一。该模块包含文件接口方法Analyzing-DataFile。因此图片图块,框架和动作信息,框架和动作编号存储在结构体中。
4.2.2sprAnimation片段动画管理和播放模块
sprAnimation片段动画管理模块的主要方法是结合cocos2d-x方法的纹理,用于渲染动作帧的加载优化。它可以被视为渲染每个sprite的节点,如:open-draw-close进程。SprAnimation使用批渲染将多精灵制作成纹理,然后直接绘制纹理的统一映射,而不是单独绘制子节点。它使OpenGL ES绘图变得像:open-draw-draw ...- draw-close。它节省了多个纹理打开 - 关闭 - 绘制的时间。因此,sprAnimation模块在渲染纹理和内存管理方面具有优势。
在sprAnimation播放模块中,主要使用开源引擎的scheduleupdate帧更新机制来使帧的动作序列播放。它将帧序列添加到更新队列,当帧间隔时间每次完成更新时,它将调用updateAni函数。对相应的动作序列使用帧序列索引的加法和减法以及循环和其他键操作,实现循环帧,跳帧,反帧动作。行动如下所示:
4.2.3Sprites片段运动图形原始动作精细碰撞模块
精灵片段动画中的精细碰撞也是本文的优化模块。根据当前动作id,动作的帧序列和当前子帧中的帧数据是已知的,每个子帧具有冲突数据阵列。这些碰撞矩形的数据是从零开始的序列。当前帧中的每个数组元素包含帧结构中的x,y,宽度范围和高度范围。我们的碰撞分辨率同时取决于多个矩形。最后,将碰撞数据结构分析为CCRect对象。通过使用多个碰撞结构和数组拆分细化碰撞。因此,通过遍历片段的阵列数据的检测,碰撞检测更精确和更真实。
5通过lua脚本实现sprites片段动画的一般解决方案
5.1lua和c 的堆栈交互理论
Lua使用堆栈与C. Lua表进行数据传输,使用metastable协调实现面向对象的lua。Tolua用于将C 中的常量,函数,类和类方法映射到lua,以实现脚本和c 之间的通信。
在游戏引擎中,lua负责调用由c 创建的这些函数。下面是如何使用lua脚本实现逻辑控制和使用C sprites片段动画的底层结构。
5.2Lua使用的精灵片段动画的一般实现和封装
片段动画的核心结构构建了基本的spxAnimation类,通过文件的c 分析来解释和构造片段动画。在cocos2d包中为lua调用打包spxAnimation类的具体处理过程相对清楚。通过上层lua脚本,程序员可以通过一般架构灵活有效地在游戏引擎中实现动画。详情如下:
图6 c for lua闭包体系
基于lua堆栈理论,如何用lua详细调用spxAnimation类是显而易见的。我们必须使用新堆栈初始化一个新的lua运行时环境。然后在lua环境中注册lua标准库和cocos2dx函数。然后我们使用lua寄存器类将函数推送到lua堆栈并在cocos2d包中注册spxAnimation类。函数的注册类似于类包的注册。我们通过堆栈操作使sprAnimation类中的“create”能够在C 和lua之间共享。然后,我们在数据堆栈中按下lua中的sprAnimation对象指针和para meter。所以我们可以为lua调用弹出数据堆栈对象的指针。
tolua_function
(tolua_S,”create”.tolua_Cocos2d_sprAnimation_create00);...
sprAnimation *tolua_ret =
(sprAnimation*)sprAnimation::create(file,image);
Tolua_pushusertype
(tolua_S,(void*)tolua_ret,”sprAnimation”);...
lua的二级封闭是一般体系结构的最后一步。lua框架为C 接口创建一个包,使用tolua工具并将C 接口转换为lua样式接口。当我们只为action-id和sprite动作文件和纹理提供角色的当前状态和机器时,lua脚本可以直接调用sprAnimation类的本机接口来创建碎片的动画。脚本源代码如下:
Local animation = sprAnimation:create(“leader.sprite”,”leader.png”)
6普通帧和精灵片段动画比较
精灵片段动画在lua的一般框架之后在内存,帧速率和其他动画核心参数中进行了优化。sprites动画的片段和表I中的一般帧动画是使用Android DDMS Tools分析实内存的负载数据,用于内存检测。与普通帧动画相比,精灵动画减少2 KB内存数据只有两个动作的一张图片。
类型 |
堆(MB) |
分配(MB) |
数据对象 |
||
计数 |
总 |
平均 |
|||
帧 动画 |
9.945 |
7.471 |
29404 |
917.359 |
31 |
分段 动画 |
9.941 |
7.469 |
29356 |
915.555 |
31 |
元素片段和多矩形碰撞的组合将占据计算效率的一部分。当记忆和效率不能同时获得时,我们应该做的是试图平衡。当我们在真机上运行应用程序时,sprites片段动画的播放FPS大约是60.与上面提到的普通动画和龙骨动画相比没有区别。因此,我们上面分析的数据结果与之前的假设一致。
图7 片段精灵动画的播放FPS
7总结
本文通过对片段图像纹理文件的分析和动画信息的构建以及动作提出,使得精灵片段动画在内存管理,处理效率上得到优化,让这种技术成为常见的解决方案。 lua脚本堆栈。它对开发人员的使用灵活高效,可以被视为开源平台上的创新技术。
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[20898],资料为PDF文档或Word文档,PDF文档可免费转换为Word
课题毕业论文、文献综述、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。