cocos2dx3.4开发环境搭建详解(2)

时间:2023-02-08 18:08:55

接上文。上一篇文章讲了如何从零开始运行起来一个cocos官方自带的小例子。

本文主要介绍新建cocos2dx lua项目并运行,添加调试信息“hello world”。

版本仍然是cocos2dx3.4,本机配置仍然是64位的win7系统。

正文

根据官方文档的指示,要新建一个cocos项目,除了运行“download-deps.py”之外(我们刚才已经运行过了)还要运行一下“setup.py”,也在E:\cocos\cocos2d-x-3.4目录下。

运行“setup.py”:看看它都干了什么~
1、寻找COCOS_CONSOLE_ROOT环境变量,没有找到,自动添加了一个变量名为COCOS_CONSOLE_ROOT,变量值为E:\cocos\cocos2d-x-3.4\tools\cocos2d-console\bin的环境变量。
2、寻找COCOS_TEMPLATES_ROOT环境变量,没有找到,自动添加了一个变量名为COCOS_TEMPLATES_ROOT,变量值为E:\cocos\cocos2d-x-3.4\templates的环境变量。
3、剩了一个android平台的配置,告诉你你可以先跳过,然后再手动编辑环境变量。其实……你也只能跳过再手动配置了,不然它让你输入NDK_ROOT的安装路径你又没有……
so,等它出现“Please enter the path of NDK_ROOT(or press Enter to skip):”的提示之后,点下回车,跳到下一步。
然后又是个类似的ANDROID_SDK_ROOT,照旧,点回车跳过;
再然后又是个类似的ANT_ROOT,再点回车,退出命令窗口。

在命令窗口进入E:\cocos\cocos2d-x-3.4目录

在空白处shift+右键调出右键菜单,选择在此处打开命令窗口。进入命令窗口。

或者点电脑屏幕左下角的开始-->在左下角的输入框中输入cmd-->点回车调出命令窗口-->使用英文输入e:命令进入E盘-->再使用cd cocos\cocos2d-x-3.4进入E:\cocos\cocos2d-x-3.4目录。

在命令窗口中输入 cocos 然后回车,可以看到在cocos命令下有很多可以执行的子命令。在这里我只在用到的时候介绍相关命令。

使用cocos new 命令新建一个cocos2dx lua项目

接上步,在命令窗口中输入cocos new MyGame -l lua -p com.happy -d cocosCode点回车,cocos开始为我们创建我们的处女项目,纯洁的处女项目~cocos2dx3.4开发环境搭建详解(2)

先解释下这行命令是什么意思:

cocos new就是新建一个cocos项目;

后边加一个空格,紧跟一个英文字符串表示新建的cocos项目的名字;

空格加一个 -l 再加一个 lua,表示我们创建的cocos项目使用的主要开发语言是lua,-l就是语言的意思;

空格加-p再加一个英文字符串,表示包名,可以理解为将来发布到android平台的时候的apk安装包的前缀名,一般可以写自己公司的域名前缀(你如你已经开了自己的公司的话),比如你填了com.baidu,到时候的完整包名就会是com.baidu.MyGame;

空格加-d再加一个英文字符串(例如是cocosCode),表示这个cocos lua项目的代码创建在哪里(安啦安啦~如果文件夹不存在,将会被创建),可以理解为“工作空间”。需要注意的是,这里指定的路径为相对路径,因为我们当前的命令都是在E:\cocos\cocos2d-x-3.4文件夹下执行的,所以创建的cocos lua工程的代码实际是在E:\cocos\cocos2d-x-3.4\cocosCode下;

根据颜值定理,你需要等一两分钟到十几分钟不等。

在等待它创建完成的时间里,让我们来看看它都干了什么:

1、copy template into E:\cocos\cocos2d-x-3.4\cocosCode\MyGame:意思是复制一个模版到你新建的项目;

2、replace the project name from "HelloLua" to "MyGame":意思是把项目重命名成MyGame,为什么会有重命名呢?嗯嗯,因为刚才cocos从别的地方复制了一个模版项目到我们的项目文件夹,可能那个模版项目的项目名是HelloLua吧。由此也可以知道,cocos创建新项目实际上是复制了一个已有的项目模版到你指定的项目文件夹下。而且我们也可以找到cocos的这些项目模版,就在E:\cocos\cocos2d-x-3.4\templates文件夹中;

3、然后cocos就开始从各种目录下复制文件到我们的项目文件夹下,同时看这些文件中如果哪里还有以“HelloLua”为项目名的文件,就通过某种神秘的方式把项目名替换为“MyGame”;

4、然后替换包名;然后就完成了~


我们来看一下新建的cocos lua项目文件夹,看看麻雀虽小五脏俱全的五脏都有些什么~

cocos2dx3.4开发环境搭建详解(2)

第一个文件夹.settings放的是一些项目设置,额……是废话……我这个阶段的新手还没有用到这里的设置内容,略过不提;

frameworks是个重点。

res大家应该很熟悉,放各种素材文件的地方;

runtime也是个重点。

src当然也是重点,不过大家应该都熟悉,是放代码的地方。

下边的3个文件都是cocos项目的配置文件,除了config.json之外的两个我没什么研究,略过不提。下边主要讲runtime,次要讲frameworks。

如果使用cocos Code IDE的话,可能你知道只需要打开IDE,导入这个新建的项目就可以运行了(其实也是不能运行的),但是现在不能用cocos Code IDE了,要怎么运行起来这个新项目呢?

运行使用cocos new命令新建的cocos新项目

打开vs2012,界面左上角“文件”-->打开-->项目/解决方案-->选择E:\cocos\cocos2d-x-3.4\cocosCode\MyGame\frameworks\runtime-src\proj.win32下的MyGame.sln文件(这是个解决方案项目文件,vs可以通过这个文件知道它要打开哪些具体文件),确定;可以看到如下的内容:

cocos2dx3.4开发环境搭建详解(2)

现在是默认把MyGame设置成了启动项目,所以MyGame的字母是粗体;如果你打开的时候MyGame不是粗体,就右键-->设为启动项目;

注意,在这里,我们可以先看一下E:\cocos\cocos2d-x-3.4\cocosCode\MyGame\runtime\win32文件夹中的内容,只是一堆.dll库文件,并没有什么特殊的,接下来,就是见证奇迹的时刻……

运行vs2012界面上方的本地windows调试器,弹出窗口说文件已过期,问是否要重新编译,选是,确定(有没有很熟悉?对……第一次启动cocos示例的时候见过)。

等。颜值定理。几分钟到几十分钟。你去洗把脸回来说不定就好了。

好了,洗了把脸也精神一点了~

然后,奇迹来了!(奇迹cocos2dx3.4开发环境搭建详解(2):堵三环上了,来晚了,不好意思,不好意思……)突然发现E:\cocos\cocos2d-x-3.4\cocosCode\MyGame\runtime\win32文件夹中多了4个文件~其中一个是个可执行文件MyGame.exe~这是为什么呢?

而且,为什么要先运行MyGame.sln而不是运行main.lua文件呢?(一般的程序的入口文件不都是main.xxx吗?)

这里简单说下:因为lua语言本身的原因,它必须寄生在c++中(可能不准确,但有助于理解)运行,而刚才运行的MyGame.sln解决方案,编译之后实际上是提供了lua运行时的寄生环境。这点从cocos Code IDE的运行方式上也可以佐证,因为cocos Code IDE运行cocos lua项目时,也需要先指定一个运行时文件,这个运行时文件就是我们刚才生成的这个MyGame.exe~如果你要使用cocos Code IDE运行项目看代码效果的话,这个MyGame.exe也确实是必须的。在这个MyGame.exe文件中指定了所有lua文件的入口文件是main.lua,指定方式如下:(这段代码在E:\cocos\cocos2d-x-3.4\cocosCode\MyGame\frameworks\runtime-src\Classes\AppDelegate.cpp中)

#if (COCOS2D_DEBUG > 0) && (CC_CODE_IDE_DEBUG_SUPPORT > 0)
// NOTE:Please don't remove this call if you want to debug with Cocos Code IDE
RuntimeEngine::getInstance()->start();
cocos2d::log("iShow!");
#else
if (engine->executeScriptFile("src/main.lua"))
{
return false;
}
#endif
第一行的COCOS2D_DEBUG和CC_CODE_IDE_DEBUG_SUPPORT是两个预编译参数:

COCOS2D_DEBUG表示是否支持断点调试,默认为1,配置方法如下:

在vs2012解决方案资源管理器中右键点击MyGame项目-->属性-->配置属性-->C/C++-->预处理器-->预处理器定义-->点击预处理器定义对应的内容仔细往右看看到一个下拉按钮-->点击之-->选择“编辑”,就可以看到了~附一张图吧~

cocos2dx3.4开发环境搭建详解(2)


CC_CODE_IDE_DEBUG_SUPPORT表示是否支持在cocos Code IDE中断点调试并输出print等lua语言的调试信息,默认值为0,如果你需要在cocos Code IDE中调试的话或者想在控制台看到我们自己输出的hello world的话,需要把这个值改为1。(开发时一般也要求它的值为1)修改方法如下:

在vs操作界面中,在刚才这个文件AppDelegate.cpp中找到这个变量CC_CODE_IDE_DEBUG_SUPPORT,选中它,点F12切换到它的定义,把后边的0改为1;

或者直接打开E:\cocos\cocos2d-x-3.4\cocosCode\MyGame\frameworks\runtime-src\Classes\ide-support\CodeIDESupport.h,找到CC_CODE_IDE_DEBUG_SUPPORT,把后边的0改为1;

然后继续看上边这段c++代码。如果走到第一种情况中,就是启动RuntimeEngine,由RuntimeEngine通过某种方式读取E:\cocos\cocos2d-x-3.4\cocosCode\MyGame\下的config.json配置文件中的"entry": "src/main.lua",以指定lua的入口文件;如果走到第二种情况,就是在这里的代码里直接指定lua的入口文件是src/main.lua

好,说到这里,应该已经比较明白了。

接下来的事情就简单了。找到E:\cocos\cocos2d-x-3.4\cocosCode\MyGame\src\main.lua;打开它,如下:

cc.FileUtils:getInstance():setPopupNotify(false)
cc.FileUtils:getInstance():addSearchPath("src/")
cc.FileUtils:getInstance():addSearchPath("res/")

require "config"
require "cocos.init"

local function main()
require("app.MyApp"):create():run()
end

local status, msg = xpcall(main, __G__TRACKBACK__)
if not status then
print(msg)
end
在main函数里,也就是
local function main()
这一行下边添加一行
print("------------------------------hello world!-------------------------------")
保存。多加点分割线,好找~

回到vs2012中,再点一次本地windows调试器,重新生成过期的项目,等着看奇迹~

look!在茫茫人海中,我们找到了我们的世界~hello world!从此cocos2dx的大门就向你敞开了!你就会升职加薪,当上总经理,出任CTO,迎娶白富美,走上人生巅峰。想想是不是还有点小激动呢?!