将cocos2d-x游戏移植到win8/wp8上

时间 2013-09-04 00:10:08  CSDN博客 

1、cocos2d-x已经有win8的非官方移植版本,同样有wp8的。但是win8的版本使用的是非常古老的cocos2d-x代码,而wp8虽然有for 2.0的较新的代码,但是各种bug。所以还是自己动手丰衣足食。不过基础知识还是来自github上面的版本。理论上等cocos2d-x 3.0版本稳定之后再移植会轻松很多,但是有些迫不及待了>_<

2、此文章为小记,非教程,可能有较多错漏,毕竟作为尝试一个新的系统,各种知识都在摸索之中

3、代码暂不开源,因为刚刚开始移植,问题很多,并且不知道会不会半途而废。等稳定了再说(说不定那时候都有官方版本了)

4、移植进行中,文章暂未完成,会不定时补完,并且不会特别标注修改内容。

--------------------基础篇---------------------------

1、windows8和windows phone8并不一样,我们的游戏需要两个工程文件,虽然平台相关的代码有很多是通用的。如果之前没有安装windows phone 8 sdk的话,创建第一个wp8demo的时候会提示进行安装(敢不敢给个完整安装包!!) 后面使用win8代表桌面应用商店版本(如果连应用商店支持都不考虑的话,那就是原始win32应用。这个在windows8下基本上都可以正常运行,但是无法加入应用商店以及开始磁贴里),wp8代表移动版本(手机或平板)

2、如果没有安装 windows develop kit (注意不是wp 的sdk)则默认的demo代码创建dx11的device会失败,因为默认debug版本开启了D3D11_CREATE_DEVICE_DEBUG,这个需要开发环境支持。

3、wp8可以在模拟器上面调试,也可以真机调试。 我在真机调试时出现一个问题"can not write file to FolderID_SharedData.....",后来重启了下手机就好了。

4、vs2012不装sp3的话,模拟器与windows8.1不兼容。装了之后就好了。(吐槽下微软伟大的工程师,与自家操作系统都可以不兼容)

5、win8 for应用商店的程序,建立的静态库默认不开启“使用windows运行时扩展”,导致__cpluscplus_winrt未定义,在"c/c++"----"常规"选项中开启后正常.(/ZW)选项。这个也要稍微注意下,这个选项跟是否使用预编译一样,虽然可以对工程进行设置,但是本质上是对每一个文件夹的控制。所以可以自由控制某一个文件不开启(比如c语言代码)

-----------------------win8篇------------------------------------

1、win8不支持opengl,所以渲染api都要全部替换。 这里 似乎有一个相当给力的项目。  

      win8声音播放要使用xaudio2,懒得写代码的就使用fmodex或者是cocos2d-x win8版本自带的吧。

      win8不支持winsock2,所以socket代码要全部重写。这个暂时来看是除渲染外最大的修改。

      所有动态库和静态库要使用win8的模板来创建,否则有可能不支持。就算能运行也可能上不了应用商店。注意,这个说的是可能,我可没有试过。

      窗口创建代码要使用win8自带的,不能使用mfc win32api等等。这个相对好说,因为游戏基本不会接触到原生界面。

     线程不能使用win32 api了,虽然部分函数依然可用,但是不要给自己找麻烦。直接使用std::thread,c++标准总没有问题。

      序设置里的是编译目标目录,但是部署到编译目标目录的AppX子目录,最后上传商店需要创建AppXPackage应用程序包,不要混淆这几个概念。

     字符串转码MultiByteToWideChar/WideCharToMultiByte仍然可以使用。

       仍然可以使用C标准库/C++标准库,fopen/fread/stl::map/std::vector/strcpy/sprintf等基本函数保持不变。

     这里要说下fopen,如果可以的话,最好还是不要使用这个函数,而是使用win8提供的异步文件读取接口。但是你知道的,对于大量的游戏代码而言,所有的功能都要兼容异步不是一件容易的事。所以暂时还是使用fopen。这个就是同步文件读取的接口了。

2、游戏资源

    有两个目录先要说明下

  • 程序只读安装目录: Platform::String^ strResPath = Package::Current->InstalledLocation->Path;
  • 程序可写数据目录: Windows::Storage::ApplicationData::Current->LocalFolder->Path;   第一个目录就是程序目录(注意这个目录不包含Assets文件夹,需要自己拼接),第二个目录就是可写目录,也就是类似ios下面的document目录。

       win8程序只能读取这两个目录中的资源,禁止读取其他目录的资源。vs2012中添加游戏资源不是一件容易的事情,如果我骂了微软的傻x工程师一晚上是错误的话,那麻烦尽快告诉我。我非常急切的想知道向vs2012中添加资源目录的方法(自己测试显示所有文件和拖拽文件的方式均无效,只能手工一个文件夹一个文件夹的建立)。有一个偷懒,但是更加靠谱的方式,就是直接把资源拷贝到编译目录下的AppX目录下面,暂时不知道将来发布时会对编译包有什么样的影响。

       读取的时候就可以使用  Package::Current->InstalledLocation->Path 加上文件相对路径(实际文件夹路径),来访问。

    3、部分附加功能

    打开外部网页 Launcher::LaunchUriAsync(ref new Windows::Foundation::Uri("www.baidu.com "));

  • 程序只读安装目录: Platform::String^ strResPath = Package::Current->InstalledLocation->Path;
  • 程序可写数据目录: Windows::Storage::ApplicationData::Current->LocalFolder->Path;
  • 你可能感兴趣的:(将cocos2d-x游戏移植到win8/wp8上)