当前位置:游戏 > 程序开发

分享将Flash输出到Cocos2d的方法

来源:游戏邦 编辑:Lhyo 发布时间:2013年04月17日

免责声明:梦之城客户端网文章来源于作者原创或整理自互联网,仅为提供更多信息,不代表梦之城客户端时代同意其观点或描述,版权归原作者所有,如需转载,请联系原作者并注明出处,如涉及作品内容、版权或其他问题,请及时与我们联系,我们将在第一时间予以更改或删除,感谢您的理解和包容!
作者:Toni Sala 关于将Flash动画输出到Cocos2d动作的话题早在数月前就存在我的脑海中。基于动作的精灵表格在精灵大小和帧率上极有局限性。你的帧数越多,消耗的内存就越大。精灵越大,你需要的内存也就越多。 但实际上,内存使用率还算不上我工作至今所遇到的问题。所以才会将Flash动画输出到Cocos2d这个任务拖延到现在。 问题:《Muster my Monsters》以及高质量的动画 《Muster my Monsters》是一款玩法极为简单的游戏:它实际上是一款甚为精致的石头剪子布游戏。应该说,它是一款很棒的游戏,因为它迫使我解决将Flash动画输出到Cocos2d这个问题。 这款游戏的美术资产(注:包括所有角色设计和动画)是由Javi Sanz这名出色的Flash美术师和开发者完成。 游戏中的角色很大。在放大时,它们实际上占据了70%-80%的屏幕面积。这些角色是极为精细的Flash矢量图片,其动画也十分流畅(得益于Flash插值/渐变系统)。这也正是精灵表格十分之大的原因。 现在,给你一些粗略的数据,在Windows Phone版本中我们有2个角色,但我们计划在iOS版本中增加为5-8个角色。每个角色有9个动画。平均每个动画约有16-18帧,每帧有420*400的图片。我需要为每个角色每个动画创建一个2048*2048的精灵表格。 最终的二进制下载文件大小会受到限制,执行期间的内存消耗也同样如此。所以,即使是用压缩后的纹理格式,这也还是个问题。 解决方法:过程生成动画 我脑海中第一个想到的就是使用现成的工具制作过程生成动画,并其将输入我的iOS-Cocos2d游戏引擎。我发现两个很有趣的工具:LevelHelper以及新版CocosBuilder。 这两种工具都有一些基本的过程生成动画技术支持。但目前他们主要用于制作菜单按钮和UI等元素的动画。所以,虽然我们可以使用这些工作制作《Muster my Monsters》的动画,但这却并非最佳解决方案。我还考虑使用Spriter,但该项目的早期阶段却并不允许。 更重要的是,Javi已经是一个很有才华的Flash美术师,所以将Flash动画输出到Cocos2d似乎是一个可行的方法。 首次尝试:输入Flash XML文件 我从未使用Flash开发过内容,所以我的第一次尝试就是避免与之产生任何交集。Flash拥有一个允许你用XML格式输出整个Flash项目的强大功能。这看起来似乎就是最便捷的方法,因为这便于我专注于iOS-Cocos2d方面的事情。 但是,Flash XML文件格式很糟糕。它极为巨大并且如果你使用了一些功能就会改变基本的布局。每次我有一个输入者的运行版本时,都会发现运用于Flash项目时,会有一个新功能更改了所有的XML文件格式。即使创造更多XML文件,也会分裂项目元素。 再次尝试:使用Action Script输出Flash动画 此时Javi建议针对这个Flash项目编写一个简单的Action Script运行每一帧,寻找与角色一致的对象并获得转换信息。这听起来像是一个很好的替换方法,所以我最终决定学习Flash脚本和开发的基本方法。 事实证明这值得一试。实际上,这也是我最终采用的解决方案。我有一个简单的动作脚本可用每一帧动画的每个对象的转变信息编写plist(或XML)文件。 这意味着一种策略变化。在首次尝试时,我们试图输入Flash XML文件格式,我试图将所有的Flash功能映射到Cocos2d动作。所以,我尝试获取关键帧、插值帧和清除函数等高端信息。 但是,动作脚本策略产生的是逐帧的信息。这是有点粗糙的信息。所以,我不需要关心高端功能。这只是逐帧的动画描述。在一定意义上,与使用精灵表格非常相似。 这种方法有些非常有趣的优势: *实际上减少了所需内存 *支持极高质量的动画 *支持动画师使用包括motion tweens、classic tweens甚至是基于骨骼的动画等所有Flash动画功能 *在iOS-cocos2d方面减少了动画引擎的复杂性,并令其更易扩展和维护 *在我的案例中,支持Javi持续使用Flash工具 在cocos2d方面 实际上,我是在Flash完成困难的内容。所以,只要我准备好plist文件,就只差解析的问题了。我为自己的引擎(用于模拟移动对象、帧和动画)创建了一些类。 然后使用这个模拟类创造一个由数个精灵组成的CCNode(注:针对角色的每个身体部分,例如头、臂、前臂、身体、足等)。最后,我针对每个模拟帧创造了一系列可插入转变信息(定位、旋转和缩放)的cocos2d系列动作(CCSequence)。 所以实际小,最终的“角色”类是一个含有海量CCActions,能够响应Flash项目所创建动画的CCNode。你可以使用以下方法播放动画: 1 [character playAnimationWithKey:@"attack"]; 针对Mac OS的播放器 这种方法的主要问题在于获取转变数据的Action Script以及cocos2d引擎制定了一些假定条件。Flash动画师必须清楚这些假定或局限性,并据此创造动画。 所以他在制作动画时需要获得一些反馈。他需要知道自己用Flash所做的东西确实能够运行于游戏引擎。这也正是我为何开发一个Mac OS播放器的原因,它可以让你动态馈送描述动画的plist文件以及响应不同测试角色的资产。 总结 我想概括这种方法的主要优点与缺点以解决“向cocos2d actions输出Flash动画”的问题。 优点: *极大减少所需内存 *支持极为高端的动画 *允许动画师使用包括motion tweens、classic tweens甚至是基于骨骼的动画等所有Flash动画功能 *在iOS-cocos2d方面减少了动画引擎的复杂性,并令其更易扩展和维护 *在我的案例中,支持Javi持续使用Flash工具 *令我无需开发定制动画工具 缺点: *在一定程度上,我们使用Flash Authoring工具作为游戏引擎的动画编辑器。虽然这可以节省我们开发定制工具的精力,但也意味着我无法更多地控制美术人员所制作的动画。我的意思是说,尽管我已经撰写了一份详细的文件解释了针对我们的引擎,使用Flash作为动画编辑器的指导原则和局限性,但Javi可能还是出乎我预料地使用了一些并不在支持范围的功能或角色设置。 未来计划 我打算使用这种工具创造菜单等游戏屏幕。与CocosBuilder的用法相似,但会使用Flash Authoring工具作为场景编辑器。这可以让我们在Flash中使用其所提供的高级动画功能设置游戏屏幕。 游戏邦注:原文发表于2012年7月18日,所涉事件及数据以当时为准。
Cocos2d Flash