USING_NS_CC的理解

USING_NS_CC的理解

2014-2-18

       打算在HelloWord中要添加一个精灵随鼠标拖动的功能。首先在HelloWord.h文件中加入如下代码:

       //在这里我们定义一个精灵指针。

       CCSprite*   m_pSprite;

       首先,编译的时候,VS编译不通过,查看编译信息,如下所示:


       是说在*前,缺少“;”,首先怀疑是CCSprite没有其定义文件,打开cocos2d.h文件,我们可以看到如下代码:

       //sprite_nodes

#include "sprite_nodes/CCAnimation.h"

#include "sprite_nodes/CCAnimationCache.h"

#include "sprite_nodes/CCSprite.h"

#include "sprite_nodes/CCSpriteBatchNode.h"

#include "sprite_nodes/CCSpriteFrame.h"

#include "sprite_nodes/CCSpriteFrameCache.h"

说明,我们有添加精灵类的头文件。

由于无法找出错误原因,因此我直接在HelloWord.cpp文件定义CCSprite和添加其操作代码,发现又通过了。于是,我认定是在头文件和cpp的开头部分有出入,查看头文件开头部分,如下:

#ifndef __HELLOWORLD_SCENE_H__

#define __HELLOWORLD_SCENE_H__

 

#include "cocos2d.h"

 

Cpp文件开头部分如下:

#include "HelloWorldScene.h"

 

USING_NS_CC;

二者不同点就在于在cpp文件有使用了coco2d命名空间,在头文件加入USING_NS_CC;重新编译,就通过了。那么USING_NS_CC是干嘛用的呢;

       我们看USING_NS_CC的宏定义,可以看到:

#ifdef __cplusplus

    #define NS_CC_BEGIN                    namespace cocos2d {

    #define NS_CC_END                       }

    #define USING_NS_CC                     usingnamespace cocos2d

#else

    #define NS_CC_BEGIN

    #define NS_CC_END

    #define USING_NS_CC

#endif

发现所谓的USING_NS_CC就是使用了cocos2d的命名空间。查看维基百科定义命名空间的定义:表示标识符(identifier)的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其它命名空间中。

但我们为什么要在代码中加入USING_NS_CC呢,我们已经导入了CCSprite.h文件!查看CCSprite.h代码,我们可以看到如下代码:

#ifndef __SPITE_NODE_CCSPRITE_H__

#define __SPITE_NODE_CCSPRITE_H__

 

#include "base_nodes/CCNode.h"

#include "CCProtocols.h"

#include "textures/CCTextureAtlas.h"

#include "ccTypes.h"

#include "cocoa/CCDictionary.h"

#include <string>

#ifdef EMSCRIPTEN

#include "base_nodes/CCGLBufferedNode.h"

#endif // EMSCRIPTEN

 

NS_CC_BEGIN

 

可以看到CCSprite.h中同样使用命名空间,NS_CC_BEGIN宏定义是“namespace cocos2d {”表示一下代码是在“cocos2d”空间定义的。如果我们要使用CCSprite.h内的任何数据,都必须使用cocos2d空间, 即using namespace cocos2d,就是USING_NS_CC。

       当然我们可以在前面直接使用空间名,也可以在定义地方加入空间名,比如这样定义:

       //在这里我们定义一个精灵指针。

       cocos2d::CCSprite*   m_pSprite;

 

好了,就这样。这时我的第一篇Cocos2d博文,也是我的第一篇博文。现阶段处于刚学Cocos2d两周阶段,都还处于不懂的阶段,希望能通过不断的努力,提高自己的技术。


  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值