cocos2dx第一个游戏项目helloworld(二)

来源:互联网 发布:淘宝信誉度 编辑:程序博客网 时间:2024/06/05 05:23

      前一篇里主要介绍了helloworld的一些“内容”。今天来简单介绍一下cocos2dx引擎的一些核心类:Ref,Node,Scene,Director。了解这些,将大大帮助读者理解透彻helloworld的来龙去脉。笔者会以helloworld为例子逐步的介绍这些成员。

       来helloworld的src目录下,找到AppDelegate.cpp文件,我们来看看以下代码:



       可以看到director(导演)是通过Director::getInstance()方法获取的,然后通过HelloWorld::createScene来

获取Scene(场景),之后“导演”运行了“场景”:director->runWithScene(scene)。多么形象的命名、游戏

仿佛一个舞台,场景里有Sprite(精灵/图片)、Label(文本)、Menu(菜单按钮)等等。然后导演开始运行场景

。看到这里,游戏开发的世界,好像不是那么神秘莫测?对,其实就这么简单。

     也许有朋友去看了HelloWorld的createScene方法。那么你会看到这么一行代码:return HelloWorld::create();

再然后你发现HelloWorld并没有create方法???不,其实有,在这里:



      来看看这个CREATE_FUNC宏的实现是怎么样的,双击CREATE_FUNC转到定义你会发现以下代码


      如果对C++里面的“宏”知识不熟悉的同学,请自行百度下,笔者暂时不做宏的知识补充。这个CREATE_FUNC

的作用就在于创建一个名为“create”的方法,这个方法的返回类型是__TYPE_,于是乎,它在helloworld里的真面目实际上是这样的:



      笔者特意注释掉了CREATE_FUNC(HelloWorld);然后添加了红色矩形框里的代码,比对一下CREATE_FUNC的定义格式,你就会发现事实上笔者就是把HelloWorld代替了__TYPE_,然后去掉了反斜杠而已、没错,调用了这个宏的

作用就相当于创建了这么一串代码即:create方法。

     然后继续看CREATE_FUNC的内容,它new了一个__TYPE_类型,在这里相当于new了HelloWorld,然后调用了它

的init方法和autorelease方法。说HelloWorld拥有init方法我们还理解,因为它的HelloWorld.h文件里确实有。但是

autorelease是哪里冒出来的?又有什么作用?来,我们双击转到定义去看看:



       发现了吧,它是属于Ref的方法,学过C++的朋友都知道:我们一旦new了一个指针,必定要delete这个指针。而一旦调用了这个方法,我们就可以不用进行内存管理了,cocos2dx引擎会帮你管理所有调用了autorelease的对象。

说到这,有人也许会问:可是HelloWorld有autorelease方法?是的,它有。让我们顺着继承链不停找下去,然后就

会发现HelloWorld的继承链是HelloWorld->Scene->Node->Ref。因此HelloWorld的确是有autorelease方法的。

而事实上Ref也是cocos2dx引擎大多数类的基类。因为大多数类都可以autorelease(自动释放)。

     楼上好像还发现了Node?那就顺道讲讲它,双击转到定义去看看它的实现,然后,你会发现,这个类好长!是的

没错,我们主要去找找这几个函数:

     一:virtual void setPosition(float x, float y);设置位置,在上一篇HelloWorld项目介绍里出现过。

     二:virtual const Size& getContentSize() const;返回这个Node的大小。

     三:virtual void addChild(Node * child);把child作为“孩子”添加到Node里面去,在HelloWorld中,label和Menu,Sprite都是这样被添加到Scene(游戏场景)里去的,从addChild的参数为Node *来看,显然label和Menu

也都是继承Node的,读者可以自己去看看。 

     这三个函数在上一篇都出现过,它们在cocos2dx游戏开发中同样用的最多,最频繁,可见Node类的重要性。Node还有很多重要,实用的函数,读者可以自己去看看和调用试试。

     那么今天先写这么多,有点累,休息咯、

原创粉丝点击