(原创,转载注明出处:http://www.cnblogs.com/binxindoudou/p/4017975.html )html
1、实验背景c++
cocos2d-x已经发展的相对完善了,从项目的建立、编译、运行到最后的打包都有相应的便捷工具,开发者只须要关注本身的游戏逻辑代码便可,这一点很赞,但是傻瓜式的编程,让我至今还只停留在使用vs建个空项目作个小demo的阶段,我根本不知道cocos2d-x项目到底是如何组织的,那些项目与项目之间的关系,那些库文件的引用,那些属性的配置,那些路径设置,那些宏定义到底是在哪里,为何会出现两个窗口,一大片属性到底是什么意思,,因此颇有必要研究一下。如今把实验过程同你们交流一下,有什么说的片面或不对的地方,欢迎你们提出,一同进步。数据库
2、实验目标编程
1.使用vs从一个空项目配置成为一个能够运行cocos2d-x官方lua demo的项目。json
2.学习vs项目属性配置相关知识。socket
3、实验条件工具
Virtual Studio 2013 Update3 、 cocos2d-x-3.2 Jul.17 2014(将其解压在桌面上,安装配置好cocos2d-x)学习
4、实验步骤与注意事项ui
1.使用vs在桌面上建立一个win32控制台应用程序的空项目,我这就叫test,按照下图二的目录结构进行建立,其中文件( 包括资源文件)都是从引擎根目录下找到并复制到项目中的,这里的cpps就是所谓的“本身编写的cpp代码”。lua
(1)默认vs的空项目的解决方案和项目名称相同,一个解决方案能够包含多个项目,一个解决方案对应一个程序,test项目默认为核心,其余项目为其服务,生成lib和dll。头文件、源文件、资源文件三个是文件筛选器,至关于逻辑目录,只是便于管理文件,与文件的物理路径无关,我习惯将其对应起来。外部依赖项不禁本身控制,包含外部库的头文件。上图三四是我配置完成后的项目,包含cpps(自定义cpp逻辑代码),luas(自定义的lua逻辑代码),res(程序的资源文件)。
(2).sdf是一个数据库文件,编译时自动生成,存放工程信息,与代码提示相关。.sln文件是解决方案文件,保存的是解决方案信息,是一个解决方案中不一样项目之间的关系文件。
2.项目-》属性管理器,右键Debug|win32,添加现有属性表,从cocos2d-x引擎根目录(如下称$(EngineRoot))下找到 $(EngineRoot)\cocos\2d\
cocos2d_headers.props和cocos2dx.props两个文件添加。
3.回到解决方案管理器,右键test->属性,c/c++->常规->附加包含目录,添加上以下目录
$(EngineRoot)cocos\scripting\lua-bindings\auto $(EngineRoot)cocos\scripting\lua-bindings\manual $(EngineRoot)cocos\audio\include $(EngineRoot)external\lua\lua $(EngineRoot)external\lua\tolua $(EngineRoot)external\chipmunk\include\chipmunk
(1)附加包含目录:其实就是“本身编写的cpp代码”须要查找头文件和原文件的位置。
(2)$(EngineRoot)是在cocos2d_headers.props和cocos2dx.props中定义的
4.预处理器,这一步是定义cocos2dx中相似平台_WINDOWS这样的代码(我说我为何有的时候不明白这个到底是从哪定义到的,这里恍然大悟)
懒死,复制吧,嘿嘿
WIN32 _WINDOWS STRICT _CRT_SECURE_NO_WARNINGS _SCL_SECURE_NO_WARNINGS_DEBUG COCOS2D_DEBUG=1
5.附件库目录
$(EngineRoot)external\lua\luajit\include\;$(EngineRoot)external\lua\luasocket\;$(EngineRoot)external\lua\tolua\;$(EngineRoot)external\xxtea\;$(EngineRoot)cocos\scripting\lua-bindings\;$(EngineRoot)external\ConvertUTF\;$(EngineRoot)external\edtaa3func\;$(EngineRoot)external\tinyxml2\;$(EngineRoot)external\unzip\;$(EngineRoot)external\xxhash\;$(EngineRoot)3d\;$(EngineRoot)base\;$(EngineRoot);$(EngineRoot)deprecated\;$(EngineRoot)math\;$(EngineRoot)physics\;$(EngineRoot)platform\;$(EngineRoot)renderer\;$(EngineRoot)2d\;$(EngineRoot)cocos\audio\include\;$(EngineRoot)cocos\audio\win32\;$(EngineRoot)cocos\editor-support\cocosbuilder\;$(EngineRoot)external\json\;$(EngineRoot)external\json\internal\;$(EngineRoot)cocos\editor-support\cocostudioActionTimeline\;$(EngineRoot)cocos\editor-support\;$(EngineRoot)cocos\editor-support\spine\;$(EngineRoot)cocos;etwork\;$(EngineRoot)cocos\storage\local-storage\;$(EngineRoot)cocos\ui\;$(OutDir);%(AdditionalLibraryDirectories)
(1)这个是我从$(EngineRoot)中复制的。
(2)附加库目录->添加第三方库须要查找的目录,这一步以后, 外部依赖项就自动添加了,打开来看会发现里边有好多.h,之后使用#include "*****.h"就无忧了。
6.附加依赖项
(1)附加依赖项,就是所谓的库文件了lib,静态库文件,其实有了他们,就至关因而有了第五步中的.h们对应的.cpp们(我是这么理解的),到时候“写入”(我这不懂,姑且这么叫吧)到exe中。
(2).dll是动态连接库,是在运行时才能加载的,不会被写入最终文件.exe中。因此常常见到绿色软件.exe外部有他们。
7.两个小窗口(这里还在研究中,不知道这里对应那块代码,这样设置就对了)
8.预生成事件
(1)生成事件分为三种,预先生成事件=》编译以前执行的事件;预链接事件=》连接以前的事件;后期生成事件=》编译以后的事件
(2)这里用到的是命令行代码,我主要是复制了一些文件
//预先生成事件
if not exist $(PorjectDir) mkdir $(ProjectDir) xcopy "$(EngineRoot)cocos\scripting\lua-bindings\script\*.lua" "$(ProjectDir)" /e /y
//预链接事件
if not exist $(OutDir) mkdir $(OutDir) xcopy "$(EngineRoot)build\$(Configuration).win32\*.lib" "$(OutDir)" /e /y xcopy "$(EngineRoot)build\$(Configuration).win32\*.dll" "$(OutDir)" /e /y
//后期生成事件
if not exist $(OutDir) mkdir $(OutDir)
if not exist $(OutDir)res\ mkdir $(OutDir)res\
if not exist $(OutDir)luas\ mkdir $(OutDir)luas\
xcopy "$(ProjectDir)*.lua" "$(OutDir)" /e /y
xcopy "$(ProjectDir)*.dll" "$(OutDir)" /e /y
xcopy "$(ProjectDir)res\*" "$(OutDir)\res" /e /y
xcopy "$(ProjectDir)luas\*" "$(OutDir)\luas\" /e /y
从根目录复制已经编译好的动态和静态库到这个空项目工程中
(3)$(OutDir) ===》C:\Users\username\Desktop\test1\Debug,最后的生成目录,完成后能够单独拷贝出来运行。
(4)$(Configuration),因Debug版本和Release版本而异
(5)$(PorjectDir),Debug工程目录,调试目录,工做目录
9.能够先编译一次,而后将
在生成中使用设置为否,以避免每次都复制这么多文件(若是没有什么变化的话,这一步能够手动进行复制)。
10.看看效果吧
11.完成了。
(原创,转载注明出处:http://www.cnblogs.com/binxindoudou/p/4017975.html )