今天有个小伙伴在cocos2dx自带的HelloWorldCpp中,添加使用cocos2dx 的九宫格图支持的功能时,遇到了一系列问题,想想也奇怪,在添加之前工程能够正常跑起来,代码也是参考TestCpp里拷过来的,在拷过来之前也能正常运行,纠结了大半天,一直没有找到最终解决办法,主要问题是两个:
1、知道九宫格是引入哪一个头文件,可是引入之后报错,找不到对应的文件;
2、解决了头文件找不到的问题之后,能编译了,又出现链接错误;
出现两个问的根本原因,还是在于对引擎项目架构不熟悉以及对Visual Studio特点不是很了解
整理了一下cocos2dx使用ext遇到这两个问题的解决步骤,也记录一下,方便后面可以直接给自己、给他人看看
首先要引入的头文件是cocos-ext.h,然后一般跟cocos还有一个单独的命名空间,同样引入使用,具体代码如下
#include "cocos-ext.h"
USING_NS_CC_EXT;
这时如果是在HelloCpp工程上改的话,那么就会出现头文件找不到咯,当然平常我们搭建项目时,绝大部分都是通过拷贝HelloCpp工程,然后在它的基础上去改,这样可以减少很多项目配置的工作,然而helloCpp在跟cocos2dx完整项目TestCpp是有挺多区别的。
第一个问题,实际上就是项目的C++附加包含目录设置问题,也就是include的目录,使用ext对应的目录就没有,小伙伴用的九宫格就需要有$(ProjectDir)..\..\..\..\extensions,这个是需要我们手动去添加修改的,
在项目上右键,选择属性-->配置属性-->C/C++-->常规-->附加包含目录-->点击,有下拉选择编辑,添加我们需要的附加项,添加之后,如下图
第二个错误,实际是vs链接工程里,没有找到对应的链接库
报的错如下:
HelloWorldScene.obj : error LNK2019: 无法解析的外部符号 "public: static class
cocos2d::extension::CCScale9Sprite * __cdecl
cocos2d::extension::CCScale9Sprite::create(char const *)"
(?create@CCScale9Sprite@extension@cocos2d@@SAPAV123@PBD@Z),
该符号在函数 "public: virtual bool __thiscall HelloWorld::init(void)"
(?init@HelloWorld@@UAE_NXZ) 中被引用
对比TestCpp,我们也能发现实际上,缺的就是libExtensions.lib
添加上,即可以正常链接了。
步骤如下:在项目上右键,选择属性-->配置属性-->链接器-->输入-->附加依赖项,点击有下拉框,选择编辑
将libExtensions.lib加上就可以了,
最终如下图:
完成之后,项目就能正常运行了。