Cocos2d-x
3.x
移植WP8版本
2015/11/25
我们的官方网站: http://starbroundary.com/http://starbroundary.com/
声明
Cocos2dx v3.x - wp8 版本 由于使用 Angle Project模拟directx ,所以效率不高,内存占用是安卓和 ios 的2倍,对游戏开发有非常大的限制,所以上海星界软件有限公司,直接使用directx 11 渲染,改写了cocos2dx v3.x-wp8 的底层,现在你可以开发出和 ios 和 一样的体验的游戏了。
支持的平台 wp8 wp8 .1 win 8 ,win 8 .1, win10
-
libcurl找不到了?
将这个工程cocos\platform\third_party\wp8\libcurl,添加到解决方案,重新引用一下。 -
字体边缘毛刺或黑边如何处理?
修改ccx的源码,关于CCFreeTypeFont的修改,Github已给出解决方案,参见https://github.com/cocos2d/cocos2d-x/pull/4885 -
音效格式
Cocos2dx 官方只支持wav 格式,我给他支持了mp3格式。 -
关于字体
字体库太大,而使用的文字不多,可以使用字体图片来处理,参考http://www.cnblogs.com/haogj/p/3835258.htmlhttp://www.cnblogs.com/haogj/p/3835258.html
或者可以下载一个迷你字体库 -
关于输入键盘
在ccx激活输入法是通过CCEGLView::setIMEKeyboardState方式,但会遇到问题,在WP8下面会出现在中文输入法时,会同时接收到用户输入的英文和中文,而在WP8.1下面,则完全不能接受到中文。解决方式:当要激活键盘输入时,通过CCEGLView::OpenXamlEditBox来打开一个单独的专门输入页面。Cpp-test项目有示例。 -
关于内存限制
WP8上对应用内存的限制有严格限制:
http://msdn.microsoft.com/en-us/library/windows/apps/jj681682(v=vs.105).aspxhttp://msdn.microsoft.com/en-us/library/windows/apps/jj681682(v=vs.105).aspx

特别是512M机器在市面非常多,必须做好适配工作。512M属于低内存机器,一般情况下单个应用只能支持150M的运行内存,最多可以扩大到180M,做法如下:
- 图片的处理
使用dds格式纹理,可以大量节约内存。dds格式的纹理是dirextx引擎支持的格式。(我们改成的引擎已经支持这个格式,由于cocos2dx官方编辑器不支持dds,在编辑ui 等模式的时候,请使用png,最后打包的时候改成dds ,删除png既可,注意dds纹理像素大小必须是2的次方) - 内存释放
如果游戏有很多场景,在切换场景的时候可以把前一个场景的内存全部释放,防止总内存过高。Ccx内存管理参考http://cn.cocos2d-x.org/tutorial/show?id=1331http://cn.cocos2d-x.org/tutorial/show?id=1331
// 目前为止所有加载的图片
CCTextureCache::sharedTextureCache()->removeAllTextures();
// 将引用计数为1的图片释放掉
CCTextureCache::sharedTextureCache()->removeUnusedTextures();
//单独释放某个图片
CCTextureCache::sharedTextureCache()->removeTexture();
CCSpriteFrame Cache 与 CCTextureCache 释放的方法差不多。
值得注意的是释放的时机,一般在切换场景的时候释放资源,如果从A场景切换到B场景,调用的函数顺序为B::init()—->A::exit()—->B::onEnter() 。
可如果使用了切换效果,比如CTransitionJumpZoom::transitionWithDuration这样的函数,则函数的调用顺序变为B::init()—->B::onEnter()—->A::exit() 。
而且第二种方式会有一瞬间将两个场景的资源叠加在一起,如果不采取过度,很可能会因为内存吃紧而崩溃。
有时强制释放全部资源时,会使某个正在执行的动画失去引用而弹出异常,可以调用CCActionManager::sharedManager()->removeAllActions();来解决。
参考http://blog.csdn.net/zhangjingyangguang/article/details/7618048http://blog.csdn.net/zhangjingyangguang/article/details/7618048
3. 内存优化
优化的心得就是尽量去拼接图片,使图片边长尽可能的保持2的N次方并且装的很满。但要注意,有逻辑关系的图片尽量打包在一张大图里,另外一点就是打包的时候要考虑到层的分布。因为为了渲染效率可能会用到CCSpriteBatchNode; 同一个BatchNode里的图片都是位于一个层级的,因此必须根据各个图片的层级关系,打包到不同的plist里。有时内存和效率不可以兼得,只能尽量平衡了。
-
屏幕锁定或从桌面恢复时,游戏会崩溃?
这个问题是ccx的Bug,Github上已修复:
https://github.com/cocos2d/cocos2d-x/commit/b0bc97152354b92f21d64295b328dcbfea99d2d0https://github.com/cocos2d/cocos2d-x/commit/b0bc97152354b92f21d64295b328dcbfea99d2d0
并收入ccx3.0以上版本中了。 -
如果遇到难以解决的问题可以联系我, QQ :85105031
谢谢了