一种利用cocos2d-x以及HGE引擎播放Flash位图动画的系统和方法
【专利摘要】本发明涉及一种利用cocos2d-x以及HGE引擎播放Flash位图动画的系统和方法,包括获取模块、解析模块、第一数据处理单元、载入模块、第二数据处理单元和执行处理模块,通过对Flash位图动画文件进行解析,得到位图数据以及控制帧数据,并将位图数据以及控制帧数据进行加载、映射处理,并通过递归的矩阵运算实现对Flash位图动画的仿射变换和播放控制,从而实现Flash动画在主流设备上通过cocos2d-x以及HGE引擎能流畅的播放。
【专利说明】—种利用cocos2d-x以及HGE引擎播放FI ash位图动画的
系统和方法
【技术领域】
[0001]本发明涉及图形处理领域,尤其涉及一种利用cocos2d-x以及HGE引擎播放Flash位图动画的系统和方法。
【背景技术】
[0002]目前,Flash动画已经成为了事实上的业界2D动画标准,但Flash动画无法直接用于手机游戏之中。现有的流行2D手机游戏引擎C0C0S2d-x基于OpenGL,可以有效地对位图应用平移、缩放、旋转、透明度等渲染效果,但不支持Flash动画的播放。同样地,流行的PC端2D游戏引擎HGE也无法直接播放Flash动画,如何将Flash动画能够在游戏引擎中正常播放是目前有待研究的方向。
【发明内容】
[0003]本发明所要解决的技术问题是提供一种利用cocos2d-x以及HGE引擎播放Flash位图动画的系统和方法,将Flash位图动画通过解析、加载、映射等方法处理,使Flash位图动画在游戏引擎中正常播放。
[0004]本发明解决上述技术问题的技术方案如下:一种利用cocos2d-x以及HGE引擎播放Flash位图动画的系统,包括解析模块、第一数据处理单元、载入模块、第二数据处理单元和执行处理模块,所述解析模块依次与第一数据处理单元、载入模块、第二数据处理单元和执行处理模块连接;
[0005]所述解析模块,用于将Flash位图动画文件(Flash位图动画文件为SWF格式的文件)解析成控制帧数据和位图数据;
[0006]所述第一数据处理单元,用于将位图数据处理成带透明度的位图数据文件,并以相同名称存储,并将控制帧数据处理成图元数据、仿射变换控制数据和播放控制数据的控制类型文件;
[0007]所述载入模块,用于将所述的带透明度的所述位图数据文件和所述控制类型文件载入至cocos2d_x以及HGE引擎中;
[0008]所述第二数据处理单元,用于将所述带透明度的位图数据文件和所述图元数据分别加载处理成能在COCOs2d-x以及HGE引擎中执行的类型,再将加载处理后的带透明度的位图数据文件与加载处理后的图元数据作关联处理;
[0009]所述执行处理模块,用于运行所述仿射变换控制数据和播放控制数据,按时间次序依次执行仿射变换控制和播放控制的指令,通过图元数据控制所述关联后的所述位图数据文件在C0C0S2d-x以及HGE引擎中变换。
[0010]在上述技术方案的基础上,本发明还可以做如下改进。
[0011]进一步,还包括一个用于获取Flash位图动画文件的获取模块,其输出端连接所述解析模块的输入端,将Flash位图动画文件传送至解析模块中。[0012]进一步,所述第一数据处理单元包括第一位图处理模块和第一控制帧处理模块;
[0013]所述第一位图处理模块,其输入端连接所述解析模块的第一输出端,输出端连接所述载入模块的第一输入端,用于将位图数据处理为带透明度的PNG-24格式的位图数据文件并以相同名称存储;
[0014]位图数据需要统一换成PNG-24格式使用,位图数据一般为RGBA8888格式,RGBA8888格式这是PNG文件格式所支持的带透明度的每通道8位的彩色图像,直接通过Gdiplus 库(Gdiplus 库是图形设备接口 GDI:Graphics Device Interface 的接口 函数,图形设备接口是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出),以及构造位图函数(Bitmap)保存为PNG-24格式即可。
[0015]所述第一控制帧处理模块,其输入端连接所述解析模块的第二输出端,输出端连接所述载入模块的第二输入端,用于将控制帧数据包解析成图元数据(图元——图形元素,可以编辑的最小图形单位,是组成图像的基本单元)、仿射变换控制文件和播放控制文件。
[0016]SWF格式的文件是由一个个Tag (标签)组成的,利用DefineShape、DisplayObject、DoAction函数分别对图元数据、仿射变换控制文件和播放控制文件所对应的Tag (标签)进行解析即可。
[0017]进一步,所述第二数据处理单元包括第二位图处理模块和第二控制帧处理模块;
[0018]所述第二位图处理模块,其输入端连接所述载入模块的第一输出端,输出端连接所述执行处理模块的第一输入端,用于将所述带透明度的位图数据文件加载处理为纹理;加载处理后的所述纹理存储在内存中。
[0019]所述第二控制巾贞处理模块,其输入端连接所述载入模块的第一输出端,输出端连接所述执行处理模块的第二输入端,用于将图元数据映射为COCOs2d-x以及HGE引擎所支持的QUAD显示元素,并将所述QUAD显示元素和所述纹理作关联处理;
[0020]QUAD是2D游戏引擎中所使用的基本显示元素之一,指一个由四个顶点所描述的四边形,分别包括了四个纹理坐标、四个显示坐标以及四个顶点颜色。QUAD在所述两个游戏引擎中所对应的实现,分别是cocos2d-x中的ccV3F_C4B_T2F_Quad结构以及HGE中的hgeQuad 结构。
[0021]本发明解决上述技术问题的另一技术方案如下:一种利用cocos2d-x以及HGE引擎播放Flash位图动画的方法,包括如下步骤:
[0022]步骤1:将Flash位图动画文件解析成位图数据和控制帧数据;
[0023]步骤2:将位图数据处理成带透明度的位图数据文件,并以相同名称存储,并将控制帧数据处理成控制类型文件图元数据、仿射变换控制数据和播放控制数据的控制类型文件;
[0024]步骤3:将所述带透明度的位图数据文件和控制类型文件载入至COCOs2d-x以及HGE引擎中;
[0025]步骤4:将所述带透明度的位图数据文件和所述控制类型文件分别加载处理成能在C0C0S2d-x以及HGE引擎中执行的类型,并将加载处理后的带透明度的位图数据文件与加载处理后的图元数据作关联处理;
[0026]步骤5:运行处理后的所述仿射变换控制数据和播放控制数据,按时间次序依次执行仿射变换控制和播放控制的指令,通过图元数据控制所述关联后的所述位图数据文件在cocos2d-x以及HGE引擎中变换。
[0027]在上述技术方案的基础上,本发明还可以做如下改进。
[0028]进一步,还包括如下步骤:
[0029]获取Flash位图动画文件,将位图动画文件传送至解析模块中的步骤。
[0030]进一步,所述步骤4中的将所述带透明度的位图数据文件和所述控制类型文件分别加载处理成能在COCOs2d-x以及HGE引擎中执行的类型,并将处理后的位图数据文件与处理后的控制类型文件作关联处理,具体实现如下:
[0031]步骤41:将所述带透明度的位图数据文件加载处理为纹理;
[0032]步骤42:将图元数据至位图数据文件至纹理做相关联的映射处理并建立起相互联系的映射表;
[0033]步骤43:将图元数据映射为C0C0S2d-x以及HGE引擎所支持的QUAD显示元素。
[0034]进一步,所述步骤5中依次执行所述仿射变换控制文件和播放控制文件,控制关联后的所述位图数据文件在COCOs2d-x以及HGE引擎中变换的实现方法为,所述仿射变换控制文件和播放控制文件分别通过递归的矩阵运算来实现仿射变换和播放控制。
[0035]本发明的有益效果是:将Flash位图动画SWF文件转换为可在cocos2d-x以及HGE引擎中播放动画文件,并成功地在实际游戏中流畅的播放,能够实现控制播放速度,以及旋转、翻转、控制透明度等功能,最终可实现动画在当前主流设备上播放。
【专利附图】
【附图说明】
[0036]图1为本发明的一种利用cocos2d_x以及HGE引擎播放Flash位图动画的系统的模块框图;
[0037]图2为本发明一种利用cocos2d_x以及HGE引擎播放Flash位图动画的方法的一个实施例的方法流程图;
[0038]图3为本发明一种利用cocos2d_x以及HGE引擎播放Flash位图动画的方法中采用递归矩阵运算方法的示意图。
[0039]1、获取模块,2、解析模块,3、第一数据处理单元,4、载入模块,5、第二数据处理单兀,6、执行处理模式,31、第一位图处理模块,32、第一控制巾贞处理模块,51、第二位图处理模块,52、第二控制帧处理模块。
【具体实施方式】
[0040]以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
[0041]如图1所示,一种利用cocos2d_x以及HGE引擎播放Flash位图动画的系统,包括解析模块2、第一数据处理单元3、载入模块4、第二数据处理单元5和执行处理模块6,所述解析模块2依次与第一数据处理单元5、载入模块4、第二数据处理单元5和执行处理模块6连接;
[0042]所述解析模块2,用于将Flash位图动画文件(Flash位图动画文件为SWF格式的文件)解析成控制帧数据和位图数据;
[0043]所述第一数据处理单元3,用于将位图数据处理成带透明度的位图数据文件,并以相同名称存储,并将控制帧数据处理成图元数据、仿射变换控制数据和播放控制数据的控制类型文件;
[0044]所述载入模块4,用于将所述的带透明度的位图数据文件和所述控制类型文件载入至cocos2d_x以及HGE引擎中;
[0045]所述第二数据处理单元5,用于将所述带透明度的位图数据文件和所述图元数据分别加载处理成能在COCOs2d-x以及HGE引擎中执行的类型,再将加载处理后的带透明度的位图数据文件与加载处理后的图元数据作关联处理;
[0046]所述执行处理模块6,用于运行所述仿射变换控制数据和播放控制数据,按时间次序依次执行仿射变换控制和播放控制的指令,通过图元数据控制所述关联后的所述位图数据文件在C0C0S2d-x以及HGE引擎中变换。
[0047]还包括一个用于获取Flash位图动画文件的获取模块1,其输出端连接所述解析模块的输入端,将Flash位图动画文件传送至解析模块中。
[0048]所述第一数据处理单元包括第一位图处理模块31和第一控制帧处理模块32 ;
[0049]所述第一位图处理模块31,其输入端连接所述解析模块的第一输出端,输出端连接所述载入模块的第一输入端,用于将位图数据处理为带透明度的PNG-24格式的位图数据文件并以相同名称存储;
[0050]位图数据需要统一换成PNG-24格式使用,位图数据一般为RGBA8888格式,RGBA8888格式这是PNG文件格式所支持的带透明度的每通道8位的彩色图像,直接通过Gdiplus 库(Gdiplus 库是图形设备接口 GDI:Graphics Device Interface 的接口 函数,图形设备接口是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出),以及构造位图函数(Bitmap)保存为PNG-24格式即可。
[0051]所述第一控制帧处理模块32,其输入端连接所述解析模块的第二输出端,输出端连接所述载入模块的第二输入端,用于将控制帧数据解析成图元数据、仿射变换控制文件和播放控制文件。
[0052]SWF格式的文件是由一个个Tag (标签)组成的,利用DefineShape、DisplayObject、DoAction函数分别对图元数据、仿射变换控制文件和播放控制文件所对应的Tag (标签)进行解析即可。
[0053]所述第二数据处理单元包括第二位图处理模块51和第二控制帧处理模块52 ;
[0054]所述第二位图处理模块51,其输入端连接所述载入模块的第一输出端,输出端连接所述执行处理模块的第一输入端,用于将所述带透明度的位图数据文件加载处理为纹理;加载处理后的所述纹理存储在内存中。
[0055]所述第二控制巾贞处理模块52,其输入端连接所述载入模块的第一输出端,输出端连接所述执行处理模块的第二输入端,用于将图元数据映射为COCOs2d-x以及HGE引擎所支持的QUAD显示元素,并将所述QUAD显示元素和所述纹理作关联处理。
[0056]QUAD是2D游戏引擎中所使用的基本显示元素之一,指一个由四个顶点所描述的四边形,分别包括了四个纹理坐标、四个显示坐标以及四个顶点颜色。QUAD在文中所述两个游戏引擎中所对应的实现,分别是cocos2d-x中的ccV3F_C4B_T2F_Quad结构以及HGE中的hgeQuad 结构。
[0057]如图2所示,一种利用cocos2d_x以及HGE引擎播放Flash位图动画的方法,包括如下步骤:
[0058]步骤S1:获取Flash位图动画文件,将Flash位图动画文件传送至解析模块中;
[0059]步骤S2:将位图数据处理成带透明度的位图数据文件,并以相同名称存储,并将控制帧数据处理成控制类型文件图元数据、仿射变换控制数据和播放控制数据的控制类型文件;
[0060]步骤S3:将所述带透明度的位图数据文件和所述控制类型文件载入至COCOs2d-x以及HGE引擎中;
[0061]步骤S4:将所述带透明度的位图数据文件加载处理为纹理;
[0062]步骤S5:将图元数据至位图数据文件至纹理做相关联的映射处理并建立起相互联系的映射表;
[0063]步骤S6:将图元数据映射为C0C0S2d-x以及HGE引擎所支持的QUAD显示元素;
[0064]步骤S7:运行处理后的所述仿射变换控制数据和播放控制数据,按时间次序依次执行仿射变换控制和播放控制的指令,通过图元数据控制所述纹理在COCOs2d-x以及HGE引擎中变换。
[0065]在本实例中,步骤S4所述的将位图数据文件加载处理为纹理,在cocos2d_x使用
[0066]CTextureCache:: sharedTextureCache () ->addlmage (imgPath)来加载,HGE 中使用 hge_>Texture_Load (imgPath)来加载;
[0067]步骤S5所述的映射处理并建立起相互联系的映射表,Flash位图动画中的图元为Shap e,用Shap e I d来标识;对于图元,Shap e I d对应于一个B i tmap位图,位图使用B i tmap I d来标识。在解析Flash时,将BitmapId与所保存的PNG-24格式的位图图片名称一同存储,加载为纹理之后既可相应地建立起BitmapId = >Texture的由BitmapId到纹理的映射表;这样,先从ShapeId到BitmapId,再由BitmapId到纹理,就完成了纹理与图元的联系。
[0068]步骤S6、S7中,其中QUAD显示元素指Sprite及Shape的实例,称为Character ;对显示元素的变换包括新增显示元素、移除显示元素、对显示元素进行仿射变换、设置颜色、设置色彩混合模式;仿射变换,指的是缩放、旋转、倾斜、平移等能通过2x3矩阵运算所实现的二维变换。
[0069]播放控制,则指跳转到某一帧、转到下帧、转到前一帧、继续播放、暂停播放等播放控制命令。
[0070]步骤S7,通过递归的矩阵运算方法控制控制所述纹理在C0C0S2d-x以及HGE引擎中变换:
[0071]首先,建立具有父子关系的Sprite-Shape和Sprite-Sprite的仿射变换控制指令,Sprite中包含控制帧,Shape不含控制帧,是一个静态的显示元素,而图元数据、位图数据文件和纹理具有关联关系,
[0072]如图3所示,
[0073]Sprite A中包含了 Sprite B,而Sprite B中又包含了 Shape C。很显然,当对A进行旋转时,其中的B与C也会随之一同旋转。但B、C又可以分别进行其它的仿射变换,所以,对于B来说,它首先应用了 B的变换,再应用了 A的变换;而对于C来说,它依次应用了C、B与A的变换。因此,需要通过递归的方法,一层一层地应用其父元素的仿射变换,才能正确地显示这些元素。写成伪代码如下:[0074]
void transform(Spritelnstance* sp)
{
i ni tQuad (sp, sp->getQuad 0);
applyTransforin (sp->getQuad (), sp);
}
void applyTransforin (QUAD* quad Spri telnslance* curAntecessor)
{
if (curAntecessor ==NULL) return;
updaLeQuad (quad, cur/\ntecessor->getTransformMatr ix ());
appl yTransform (quad, curAnIecess()r->geIParent ())
}
[0075]上述伪代码描述了递归地为某个显示元素应用仿射变换的过程。对于有着父显示元素的对象,它将由下而上地依次应用自身以及每一层祖先显示元素节点的仿射变换矩阵。
[0076]使用递归方法来执行动画中的嵌入子动画的控制帧:
[0077]与仿射变换的自下而上的执行相反,控制帧的执行是自顶而下的。首先把整个动画作为一个顶层Sprite实例,依次地执行其中每一个有着控制帧的子动画的下一帧。写成
伪代码如下:
[0078]
void doFrame(Sprilelnstance* sp)
{
if (!sp->hasFramesO) return;
r unFrame (sp->gel_ Next Frame ());
for_each (Spr i telnslance* child In sp->getAlIChildren ())
{
doFrame (chi Id);
}
}[0079]以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种利用cocos2d-x以及HGE引擎播放Flash位图动画的系统,其特征在于,包括解析模块、第一数据处理单元、载入模块、第二数据处理单元和执行处理模块,所述解析模块依次与第一数据处理单元、载入模块、第二数据处理单元和执行处理模块连接; 所述解析模块,用于将Flash位图动画文件解析成位图数据和控制帧数据; 所述第一数据处理单元,用于将位图数据处理成带透明度的位图数据文件,并以相同名称存储,并将控制帧数据处理成图元数据、仿射变换控制数据和播放控制数据的控制类型文件; 所述载入模块,用于将所述的带透明度的位图数据文件和所述控制类型文件载入至cocos2d_x以及HGE引擎中; 所述第二数据处理单元,用于将所述带透明度的位图数据文件和所述图元数据分别加载处理成能在COCOs2d-x以及HGE引擎中执行的类型,再将加载处理后的带透明度的位图数据文件与加载处理后的图元数据作关联处理; 所述执行处理模块,用于运行所述仿射变换控制数据和播放控制数据,按时间次序依次执行仿射变换控制和播放控制的指令,通过图元数据控制所述关联后的所述位图数据文件在cocos2d-x以及HGE引擎中变换。
2.根据权利要求1所述的一种利用cocos2d-x以及HGE引擎播放Flash位图动画的系统,其特征在于,还包括一个用于获取Flash位图动画文件的获取模块,其输出端连接所述解析模块的输入端,将Flash位图动画文件传送至解析模块中。
3.根据权利要求1或2所述的一种利用cocos2d_x以及HGE引擎播放Flash位图动画的系统,其特征在于,所述第一数据处理单元包括第一位图处理模块和第一控制帧处理模块; 所述第一位图处理模块,其输入端连接所述解析模块的第一输出端,输出端连接所述载入模块的第一输入端,用于将位图数据处理为带透明度的PNG-24格式的位图数据文件并以相同名称存储; 所述第一控制帧处理模块,其输入端连接所述解析模块的第二输出端,输出端连接所述载入模块的第二输入端,用于将控制帧数据解析成图元数据、仿射变换控制文件和播放控制文件。
4.根据权利要求1或2所述的一种利用cocos2d_x以及HGE引擎播放Flash位图动画的系统,其特征在于,所述第二数据处理单元包括第二位图处理模块和第二控制帧处理模块; 所述第二位图处理模块,其输入端连接所述载入模块的第一输出端,输出端连接所述执行处理模块的第一输入端,用于将所述带透明度的位图数据文件加载处理为纹理; 所述第二控制帧处理模块,其输入端连接所述载入模块的第一输出端,输出端连接所述执行处理模块的第二输入端,用于将图元数据映射为COCOs2d-x以及HGE引擎所支持的QUAD显示元素,并将所述QUAD显示元素和所述纹理作关联处理。
5.—种利用cocos2d_x以及HGE引擎播放Flash位图动画的方法,其特征在于,包括如下步骤: 步骤1:将Flash位图动画文件解析成位图数据和控制帧数据; 步骤2:将位图数据处理成带透明度的位图数据文件,并以相同名称存储,并将控制帧数据处理成控制类型文件图元数据、仿射变换控制数据和播放控制数据的控制类型文件; 步骤3:将所述带透明度的位图数据文件和所述控制类型文件载入至C0C0S2d-x以及HGE引擎中; 步骤4:将所述带透明度的位图数据文件和所述控制类型文件分别加载处理成能在cocos2d-x以及HGE引擎中执行的类型,并将加载处理后的带透明度的位图数据文件与加载处理后的图元数据作关联处理; 步骤5:运行处理后的所述仿射变换控制数据和播放控制数据,按时间次序依次执行仿射变换控制和播放控制的指令,通过图元数据控制所述关联后的所述位图数据文件在cocos2d-x以及HGE引擎中变换。
6.根据权利要求5所述的播放Flash位图动画的方法,其特征在于,还包括如下步骤: 获取Flash位图动画文件,将位图动画文件传送至解析模块中的步骤。
7.根据权利要求5所述的播放Flash位图动画的方法,其特征在于,所述步骤4中的将所述带透明度的位图数据文件和所述控制类型文件分别加载处理成能在COCOs2d-x以及HGE引擎中执行的类型,并将处理后的位图数据文件与处理后的控制类型文件作关联处理,具体实现如下: 步骤41:将所述带透明度的位图数据文件加载处理为纹理; 步骤42:将图元数据至位图数据文件至纹理做相关联的映射处理并建立起相互联系的映射表; 步骤43:将图元数据映射为C0C0S2d-x以及HGE引擎所支持的QUAD显示元素。
8.根据权利要求5所述的播放Flash位图动画的方法,其特征在于,所述步骤5中依次执行所述仿射变换控制文件和播放控制文件,控制关联后的所述位图数据文件在cocos2d-x以及HGE引擎中变换的实现方法为,所述仿射变换控制文件和播放控制文件分别通过递归的矩阵运算来实现仿射变换和播放控制。
【文档编号】G06T13/80GK104008565SQ201410224526
【公开日】2014年8月27日 申请日期:2014年5月26日 优先权日:2014年5月26日
【发明者】杨潇, 黄剑, 钟柱亮, 李炽安 申请人:桂林力港网络科技有限公司