1.5 启航
接下来开始运行Cocos2d-x,这里简单介绍如何在Windows、Linux、Mac下把Cocos2d-x的代码运行起来,以及新建项目,简单对比一下新旧版本的差异。
首先需要下载Cocos2d-x,下载地址为http://cn.cocos2d-x.org/download,在这里可以下载指定的版本,下载完成后进行解压,然后可以直接打开项目工程,工程中会有HelloCpp、TestCpp等项目(1.x称之为HelloWrold,2.x称之为HelloCpp,3.x称之为cpp-empty-test,本书统称为HelloCpp),需要先指定HelloCpp为要启动的项目,然后进行编译运行HelloCpp。2.x只需要在Cocos2d-x的根目录即可看到Windows平台的项目文件sln,在samples下的proj.ios目录中,可以找到iOS的项目文件xcodeproj,3.x将项目文件都放到了build目录下,所有平台的项目文件都被整理到这里。
在Windows下需要在解决方案列表中右击将HelloCpp设置启动项目,然后按F5键运行,结果如图1-2所示。Mac下需要在XCode左上角的SchemeUI中选择HelloCpp以及模拟器,然后单击“运行”按钮或按Cmd+R快捷键,在模拟器中运行HelloCpp。
图1-2 HelloWorld
这里总结两个HelloCpp运行出错的问题,第一个是显卡驱动版本太低,不支持指定版本的OpenGL,这个问题会导致HelloCpp运行初始化OpenGL时直接崩溃,解决的方法是升级显卡驱动。第二个是由于Cocos2d-x解压后的完整路径中存在中文而导致的各种奇怪的问题,把Cocos2d-x相关的路径都放在英文路径下即可。
将Cocos2d-x的HelloCpp跑起来之后,来看一下新建项目,在讲Cocos2d-x 2.1.4之前,使用项目模板的方式来新建工程,这种方式存在一些问题,首先是各个平台的处理方法不统一,其次是在使用的过程中经常发现各种路径不对,缺这少那的问题,这对新手而言打击了学习的积极性。
从2.1.4版本开始,Cocos2d-x摒弃了项目模板的方式,采用了Python脚本来创建项目,这种方式在不同平台下都用同样的命令来创建项目,但不方便的是需要安装额外的软件,以及输入命令,配置环境变量等,并不是一键自动创建。
3.x之后集成了Cocos引擎,将Cocos所有 操作都集成进来,下载一个Cocos引擎,然后Step by Step,一路“下一步”就完成了所有的环境部署,项目创建也类似,更加方便、自动化,使开发者可以把更多的精力专注在游戏开发上,由此可以看到Cocos的不断进步。
1.5.1 Windows
在Windows中使用Visual Studio(简称VS)将Cocos2d-x运行起来是最简单的,但这里还是简单介绍一下。另外,初学者在Windows下学习任何C++相关的技术时,都容易碰到以下几个问题,这里一块讲解
在2.1.4版本之前需要安装VS模板,在Cocos2d-x的根目录下,找到install-templates-msvc.bat,双击安装Cocos2d-x模板,以后在VS中新建项目时,可以直接选择模板,然后生成Cocos2d-x项目,如图1-3所示。但总体来说,这个模板相当“坑爹”,用户必须在Cocos2d-x的解决方案中新建项目。一旦离开Cocos2d-x的解决方案单独建立项目,就会报出一大堆头文件找不到的错误,而该项目模板的本质,就是将HelloWorld的代码复制一份而已。
图1-3 旧版本的模板
把项目放在Cocos2d-x解决方案下,好处是Debug时可以进入到Cocos2d-x的代码中,并可以随时查阅引擎代码;坏处是解决方案下项目太多,有时感觉比较乱,我们希望在一个纯粹的环境中来编写代码(例如,我们有七八个游戏项目,把它们都放在一个解决方案里是让人感到挺不舒服的一件事)。一般创建一个新的解决方案会找不到Cocos2d-x的很多东西,因为模板项目中是用$(SolutionDir)变量来指定引擎的所在位置,新的解决方案的位置并不在Cocos2d-x目录下,把整个项目复制到Cocos2d-x的目录下显然不是一个好主意。
通过环境变量和修改项目关联属性来使新项目在新的解决方案中顺利编译运行,是一个比较优雅的方法。首先设定一个环境变量,名字为CocosRoot,指定Cocos2d-x的根目录。接下来修改新项目的项目属性,在项目上右击,在弹出的快捷菜单中选择“属性”命令,如图1-4所示。切换到C/C++的常规选项中,将“附加包含目录”中的变量$(SolutionDir)替换为$(CocosRoot),如图1-5所示。
图1-4 项目属性
图1-5 设置包含目录
然后再切换到链接器的常规选项中,在“附加库目录”中添加环境变量$(CocosRoot)\$(IntDir); 指定lib的路径,如图1-6所示。差一点的做法是将CocosRoot/Debug.win32下的lib直接复制到$(OutDir)目录下。这里的$(IntDir)在Debug模式下为Debug.win32目录,在Release模式下为Release.win32。在3.x中使用这种方法需要将变量修改为$(CocosRoot)\build\$(IntDir);,以适应3.x的目录调整。
图1-6 设置附加库目录
接下来就可以编译链接通过了,但是运行时会失败,因为找不到dll,差一点的做法是将CocosRoot/Debug.win32下的dll复制过来,而优雅一点的做法则是配置dll的路径,切换到调试选项中,将“环境”配置为path=$(CocosRoot)\$(Configuration).win32(path=$(CocosRoot)\$(IntDir)也是一样的),path=Dll所在的路径,再次运行即可顺利运行起来,如图1-7所示。3.x下目录结构不一样,不要忘记在中间插入build目录,同附加库目录一致。
图1-7 设置环境
这样配置的好处很明显,如果这个项目在其他电脑上打开,则不需要做其他的事情,只需要配置好对应版本Cocos2d-x的路径为环境变量即可正确编译运行(Cocos2d-x需要先编译出lib和dll)。如果是提交SVN,可以保证项目内容的简洁。升级版本也只是修改一下环境变量对应路径即可(当然,版本升级之后接口变化导致的问题只能手动解决)。
虽然只有3个步骤,但我们还可以“更懒”一些。将Cocos2d-x的template下的默认项目模版进行修改调整,将配置好的vcproject替换进去即可,保险点的话,手动对照着修改一下也可以。这样以后每次新建项目都不需要重复这3个步骤进行配置了。2.1.4之前的版本需要重新安装一下VS模板来使新模板生效。
上面只是Windows项目的创建,如果要编译iOS或者Android,还要费一番功夫。但在2.1.4之后的版本开始使用Python脚本来统一创建新项目了,所以可以直接使用根目录下的tools\project-creator\create_project.py来一键创建各个平台的项目,这样就方便很多。3.x的create_project.py的路径为tools\cocos2d-console\bin\create_project.py,但3.0之后也无须记住这个路径了,直接执行Cocos2d-x根目录下的python setup.py,程序会自动配置好相关的环境变量,之后可以直接在命令行中执行create_project.py。
安装2.7.3版本的python之后(其他版本也可以,但这是一个经过测试的版本),将python.exe所在的路径添加到path环境变量中,执行python create_project.py -project项目名-package包名 -language cpp,输入项目名和包名,自动在Cocos2d-x根目录下的 projects目录下创建新项目,如图1-8所示。注意,如果是同名项目,会被覆盖!另外,还需要注意控制台的输出是否有报错!打开projects下项目目录的proj.win32目录,即可看到Cocos2d-x生成的sln,这个sln可以直接编译运行。
图1-8 执行python命令
头文件路径、库文件路径,以及指定链接库文件,这3个问题与对应的一些错误将伴随着初学者,这里简单整理一下。
❏C1083: Cannot open include file: xxx.h No such file or directory,找不到头文件导致的编译错误,只需要找到头文件的路径,并设置到项目属性的附加头文件目录中即可。
❏LNK1104:无法解析的外部符号该符号在函数xxx中被引用,使用了外部库又没有指定链接这个库导致的链接错误,将库文件全名(包括后缀)填入项目属性的附加依赖项即可。
❏LNK1104:无法打开文件xxoo.lib,找不到库文件导致的编译错误,找到库文件的路径,并设置到项目属性的附加库目录中即可。
在Windows下写好的游戏如何给其他人玩?这也是很常见的一个问题,把我们编译生成的exe、dll和Resource目录合并,如果项目是使用MT或者MTD方式编译的,那么将这些整合到一个目录中即可在其他人的计算机上运行了。
如果对方运行报错找不到MSVCP100D.DLL或者其他相关的dll,可以在类似C:\Program Files\Microsoft Visual Studio 8\VC\redist\Debug_NonRedist\x86\Microsoft.VC80. DebugCRT下找到对应丢失的dll文件,一起放到目录下即可运行(也可以直接在网上搜索对应的dll)。
1.5.2 Mac
在Mac下使用Xcode来编译Cocos2d-x,只要不碰到版本过低这样的问题,一般都非常顺利。打开项目的xcodeproj文件就可以直接编译程序了,也不需要额外的配置。唯一需要动手的就是在终端执行安装Cocos2d-x的Xcode项目模版时,需要输入一行命令 sudo./install-templates-xcode.sh。安装完模板之后,在Xcode中新建项目即可看到项目的模板,一直单击Next按钮即可成功创建一个Cocos2d-x项目,如图1-9所示。
图1-9 iOS模板
从2.1.4版本开始,Mac下的模板方式也被废弃了,统一使用Python脚本来创建新项目。
1.5.3 Linux
Linux需要进入窗口模式来运行Cocos2d-x,在Linux下解压完Cocos2d-x之后,可能需要先安装一些依赖的第三方库,然后编译代码,运行起来。与Mac和Windows不同的是我们没有一个专门的IDE来编辑,一般在Linux下编辑代码大部分是使用Vim+GCC+Makefile,刚接触Linux的人会感觉很不适应,但抛开了IDE之后,我们接触到的是最直接最清晰的编译流程,熟悉Vim之后,编码效率不低于使用IDE。
在Linux中我们需要cd到各个目录下,然后用./xxxx命令来执行各种各样的脚本以及编译好的程序。但Cocos2d-x在Linux下的变化太过于丰富,并且平台支持也不好,这里简单对比一下不同版本的脚本差异。
❏1.x版本中,需要执行根目录下的build-linux.sh来进行编译,该脚本自动将所有so和可执行程序对应Linux项目目录下的Makefile执行一遍。
❏2.0.0~2.0.1这两个版本,没有脚本可以自动编译,应该是刚升级一个大版本,Linux相关的部分忽略了,这两个版本下需要手动编译或自己写脚本。
❏2.0.2开始到2.1版本,执行./make-all-linux-project.sh会编译所有的代码,以及自动检测Cocos2d-x在Linux下所有依赖的包,如果检测到包未存在,会自动调用apt-get进行安装。
❏2.1版本开始,make-all-linux-project.sh被分为两个文件,即./make-all-linux-project.sh和./install-deps-linux.sh,把初始化环境相关的功能抽离出来。
❏3.0版本开始使用install-deps-linux.sh来初始化环境,以及CMakeLists来进行自动编译,编译完成后在HelloCpp项目的proj.linux目录下可以找到 HelloCpp,./HelloCpp可以在Linux下运行程序(在Linux下要使用IDE来开发的话,可以用Eclipse + CDT插件)。
在Linux中创建新项目的方法变化也非常大,从一开始的没有任何脚本支持,到后面添加了create-linux-eclipse-project.sh,然后又很快被废掉,基本上在2.1.4版本之前我们只能自己写脚本来创建项目,直到2.1.4版本,Python统一了项目创建的方法。也许Cocos2d-x的开发者觉得使用Linux来开发Cocos2d-x的人动手能力更强一些,所以平台支持得不好也没关系。
在Linux中常见的问题有两个,一个是权限不够的问题,还有一个是命令执行失败的问题,由于当前系统没有这个程序,所以执行失败。
1.5.4 Cocos引擎
使用最新的Cocos引擎可以非常方便地创建项目,但该引擎只支持Mac和Windows,毕竟使用Linux来开发Cocos2d-x的人太少了,而Mac和Windows才是主流的开发平台,所以Cocos2d-x也就专注做好Mac和Windows平台的支持。
选择新建项目,可以输入项目名称、包名并选择项目语言,目前支持C++和Lua,如果是Lua语言,在项目创建成功后,可以选择使用Cocos Code IDE打开,这是Cocos引擎的一个配套工具,用于编辑、调试代码。最后单击“新建”按钮,即会自动生成各个平台的项目文件,如图1-10所示。
图1-10 使用Cocos创建项目
在最熟悉的环境下编码,以提高开发效率,了解各个平台,对处理跨平台的编译、打包和开发都有很大的帮助。