创建我们自己的Scene

作者: 深度不学习 | 来源:发表于2017-01-29 11:12 被阅读84次

    与上一篇隔了好长时间,期间遇到期末考试,又是赶上新年,所以落下了一段时间没有写。
    最近转战到Unity3D了,也打算出个学习记录,在此顺便做个提前预告,希望喜欢Unity3D的小伙伴们能够多多指教哦!

    前情回顾

    上一篇,我们分析了Cocos2d-x自带的HelloScene,理清了了从引擎启动,到显示第一个Scene的过程。
    “纸上得来终觉浅,觉知此事要躬行。”这一篇呢,我们就来实现自己的场景。

    1. 添加自己的场景类

    自己的场景类 MyScene

    普通的C++类,两个文件,一个头文件,一个源文件。
    首先来看的是头文件,看看定义了那些接口。

    MyScene.h

    '

    仿照HelloWorldScene头文件,定义了一个成员函数,一个静态方法,和一个宏函数,下面逐个介绍一下为什么要定义这些函数,以及它们都有什么作用。

    1.virtual bool init()
    这是MyScene的初始化函数。Cocos2d-x在构造新对象时,采用了创建和初始化分开的操作。new操作实际上进行的主要任务就是对象内存的分配,对象属性初始化的工作集中在了init函数中。有一点需要注意的是,子类的init函数实现的时候,需要手动调用父类的init函数,来进行父类的初始化;没有构造函数能够自动初始化父类的功能。再说init的返回值,指示的是对象初始化是否成功。

    1. static cocos2::Scene* createScene();
      静态工厂函数,负责场景的创建。如果你比较细心,就会发现,我们的MyScene它其实不是个Scene,它继承的是Layer啊。这边因为只是一个小的 场景,所以并没有把场景和层区分的太开。事实上,场景可以看作是许多Layer的容器,一个场景可以有许多的Layer。一般来说,场景是看不见的,而Layer确实实在可见的。
      这里的静态函数,是创建了一个Layer,然后也创建了一个Scene,将Layer添加到Scene中,故其名字叫做createScene

    2. CREATE_FUNC宏函数
      关于这个宏的讲解在前面一篇中有所提到,如果不太记得的小伙伴可以翻看前面一篇cocos2dx之HelloWorld代码分析。这里再次简述一下,这个宏函数负责创建了MyScene对象,加入到了自动释放池,并且调用了它的init方法。这个方法不需要实现,宏帮助你自动完成了。

    2. 实现init方法

    MyScene::ini

    这是我们的实现。
    很简单,添加了红绿蓝三个矩形方块。正如前面所说的,我们看到在这儿调用了父类中的init方法,并且也根据其返回值来判断是否初始化成功。
    关于三个层的创建代码,此处按下不表,后面章节会做细致的解释。
    此处需要注意的是addChild函数的调用,需要将创建的Layer加入到我们的MyScene中,为什么要这样呢?原因是cocos2dx采用了树形的对象管理方案,创建的三个colorLayer通过调用addChild函数成为了MyScene的子对象,引擎在渲染MyScene对象的时候,会把它的子对象一并进行渲染。别忘了最后返回一个true,来说明你的对象如期创建成功了。

    3. createScene静态函数的实现。

    MyScene:createScene

    场景创建的一个静态工厂函数。代码真的是一目了然,先创建一个场景,然后创建一个层,把层加入到场景中,返回该场景。

    3. 运行我们的Scene

    前一篇我们知道,引擎启动时候会调用bool AppDelegate::applicationDidFinishLaunching()函数,在此,我们切换到AppDelegate.cpp文件,找到bool AppDelegate::applicationDidFinishLaunching()函数,在函数最后添加如下代码:

    调用MyScene

    相关的头文件包含,相信熟悉C++的你一定会厌烦我再重复。

    编译生成之后,就可以看到相应的效果了。

    如果有什么问题的欢迎在下面评论区提出,我一定给你细致答复。加我微信也可:LCJY93,欢迎指教。

    结尾

    希望你的游戏开发之旅充满快乐,希望你和我一样热爱游戏,热爱游戏开发!

    下回预告

    是时候展现真正的技术了!

    相关文章

      网友评论

        本文标题:创建我们自己的Scene

        本文链接:https://www.haomeiwen.com/subject/xrccittx.html