cocos2d win32 helloworld 解析

cocos2d-x 游戏开发系列之一:环境搭建与HelloWorld程序解析

打开工程之后找到 下图的位置。

cocos2d win32 helloworld 解析

选中HelloWorld 按右键 选择 设为启动项。 然后就可以按 Ctrl+F5 开始译执行了。

cocos2d win32 helloworld 解析

打开 HelloWorld, 把 Classes win32 文件夹也点开。

cocos2d win32 helloworld 解析


学过CC++的 应该都知道程序入口是个 main函数。好了下面就从 main文件开始吧。

先从main.h开始。 这个文件里面没有什么,只是导入了几个头文件而已,不管它。

接着看 main.cpp。 这里面只有一个函数。 那就是我们的的程序入口 APIENTRY _tWinMain()函数。

cocos2d win32 helloworld 解析

前两条语句不用管它。它们的作用我已经注释了。第三条语句是创建一个 AppDelegate的实例,后面会介绍这个类。第四条语句是这里的关键。它才是我们游戏的真正入口。它为我们开启了一个线程并且执行。至于执行了些什么,后面会介绍,因为它涉及到CCApplication类,其实主要是跟AppDelegate这个类有很大关联。你们也可以打开cocos2d-x的安装目录\cocos2d-1.0.1-x-0.12.0\cocos2dx\platform\win32 文件夹研究CCApplication_win32.cpp文件吧。这就是开源的好处啊。。



好了下面来介绍 AppDelegate。 这个类是继承自CCApplication的。 APIENTRY _tWinMain()函数的最后一条语句也是跟CCApplication类相关的。我们先来学习一下CCApplication类吧。

Application的主要功能有下面几个:
1initInstance() 初始化程序,构建运行窗口;
2applicationDidFinishLaunching() 程序初始化完毕通知;
3applicationDidEnterBackground() 程序被切换到后台通知;
4applicationWillEnterForeground() 程序切换到前台通知;
5setOrientation(Orientation orientation) 设置屏幕窗口原点:设备是水平的还是垂直的,在左边还是在右边(或者顶端还是底部)
6run() 程序运行(进行消息循环处理)
7getCurrentLanguage() 取得当前语言配置
8sharedApplication() 所有对Application的访问都通过CCApplication::sharedApplication()提供
其中14都是纯虚函数,也就是接口声明,继承后是需要实现的。注意一下第8点。在看看main.cpp中的最后那条语句。理解为什么那样写了吧。

回到 AppDelegate类。这个类也就是实现前面4个虚函数(不同的平台实现这几个函数可能会稍微有些不同哦)。 下面把给了一些中文注释。大家可以参考一下。

cocos2d win32 helloworld 解析

cocos2d win32 helloworld 解析

cocos2d win32 helloworld 解析

注意一下上面AppDelegate::applicationDidFinishLaunching() 这个函数里面有这么一条语句:

CCScene *pScene = HelloWorld::scene();

它是用来创建场景的,场景(CCScene)的概念相当于关卡的概念,一个游戏中可以有很多个场景,但在任何时候只有一个是处于**状态。而这个创建的场景是来自HelloWorld类中的scene();函数。 好了下面我们来分析一下HelloWorld类。



HelloWorld类在HelloWorldScene.h中有定义。 它是继承自CCLayer类这个类一般称作:层。CCLayer类的一些资料请移步cocos2d-x官网:http://cn.cocos2d-x.org/document/index/class?url=d9/d66/classcocos2d_1_1_c_c_layer.html 这里面有介绍。先看 HelloWorld::scene()这个函数吧:

函数中的第一条语句是 CCScene *scene = CCScene::node(); 它就是调用CCScene::node()创建一个场景。这个函数是这样的:

cocos2d win32 helloworld 解析

第二条语句是 HelloWorld *layer = HelloWorld::node(); 就是调用HelloWorld的父类CCLayernode()函数,创建一个层。这个函数源码如下所示:

cocos2d win32 helloworld 解析

第三条语句就是把创建好的层layer添加到场景scene中。 最后一句就是返回这个场景啦。

LAYER_NODE_FUNC(CMyFirstScene); 这个宏在引擎内部(CCLayer.h)被定义。主要是为自己建的层增加一个node()函数,node()函数的作用是new一个实例,并将它加入autorelease,也就是所有由node()函数得来的指针,都不需要手动的释放(除非自己想要)



接下来看看 HelloWorld::init()函数。 在init中 你需要初始化你的实例。也就是一些游戏对象。比如菜单、主角这些的。这个函数大概分为三部分。

第一部分就是执行父类的 init()函数。 第二部分就是添加一个退出按钮。第三部分是添加了一个Label和一个SpriteLabel用来显示文字,Sprite用来显示一张图片。具体的看下面的注释。

第一部分:

cocos2d win32 helloworld 解析

第二部分:

cocos2d win32 helloworld 解析

第三部分:

cocos2d win32 helloworld 解析

注意一下 addChild() 这个函数。给它传两个参数的时候 this->addChild(pMenu, 1); this->addChild(pLabel, 1); this->addChild(pSprite, 0); 这三个语句都是上面那个函数中的。第一个产生不需要多说明。关键是第二个参数。第二个参数代表什么呢? 其实这个参数决定了绘制的先后顺序。 数字越小就越先绘制,也就是说绘制在最底下。后绘制的会遮盖掉先绘制的,也就是说后绘制的叠加在先绘制的上面。

忘了说了 addChild()这个函数来自CCNode类。 它们之间的关系是 CCNode类是 CCLayer的父类,而CCLayerHelloWorld的父类。 通俗点讲:HelloWorldCCNode的孙子。想了解CCScene, CCLayer, CCSprite, CCNode这几个类的关系,请移步 porsche880828的专栏 的博客:http://blog.csdn.net/porsche880828/article/details/6971876



好了,HelloWorld工程就解析到这了。下面稍微总结一下:

cocos2d win32 helloworld 解析

打开工程之后找到 下图的位置。

cocos2d win32 helloworld 解析

选中HelloWorld 按右键 选择 设为启动项。 然后就可以按 Ctrl+F5 开始译执行了。

cocos2d win32 helloworld 解析

打开 HelloWorld, 把 Classes win32 文件夹也点开。

cocos2d win32 helloworld 解析


学过CC++的 应该都知道程序入口是个 main函数。好了下面就从 main文件开始吧。

先从main.h开始。 这个文件里面没有什么,只是导入了几个头文件而已,不管它。

接着看 main.cpp。 这里面只有一个函数。 那就是我们的的程序入口 APIENTRY _tWinMain()函数。

cocos2d win32 helloworld 解析

前两条语句不用管它。它们的作用我已经注释了。第三条语句是创建一个 AppDelegate的实例,后面会介绍这个类。第四条语句是这里的关键。它才是我们游戏的真正入口。它为我们开启了一个线程并且执行。至于执行了些什么,后面会介绍,因为它涉及到CCApplication类,其实主要是跟AppDelegate这个类有很大关联。你们也可以打开cocos2d-x的安装目录\cocos2d-1.0.1-x-0.12.0\cocos2dx\platform\win32 文件夹研究CCApplication_win32.cpp文件吧。这就是开源的好处啊。。



好了下面来介绍 AppDelegate。 这个类是继承自CCApplication的。 APIENTRY _tWinMain()函数的最后一条语句也是跟CCApplication类相关的。我们先来学习一下CCApplication类吧。

Application的主要功能有下面几个:
1initInstance() 初始化程序,构建运行窗口;
2applicationDidFinishLaunching() 程序初始化完毕通知;
3applicationDidEnterBackground() 程序被切换到后台通知;
4applicationWillEnterForeground() 程序切换到前台通知;
5setOrientation(Orientation orientation) 设置屏幕窗口原点:设备是水平的还是垂直的,在左边还是在右边(或者顶端还是底部)
6run() 程序运行(进行消息循环处理)
7getCurrentLanguage() 取得当前语言配置
8sharedApplication() 所有对Application的访问都通过CCApplication::sharedApplication()提供
其中14都是纯虚函数,也就是接口声明,继承后是需要实现的。注意一下第8点。在看看main.cpp中的最后那条语句。理解为什么那样写了吧。

回到 AppDelegate类。这个类也就是实现前面4个虚函数(不同的平台实现这几个函数可能会稍微有些不同哦)。 下面把给了一些中文注释。大家可以参考一下。

cocos2d win32 helloworld 解析

cocos2d win32 helloworld 解析

cocos2d win32 helloworld 解析

注意一下上面AppDelegate::applicationDidFinishLaunching() 这个函数里面有这么一条语句:

CCScene *pScene = HelloWorld::scene();

它是用来创建场景的,场景(CCScene)的概念相当于关卡的概念,一个游戏中可以有很多个场景,但在任何时候只有一个是处于**状态。而这个创建的场景是来自HelloWorld类中的scene();函数。 好了下面我们来分析一下HelloWorld类。



HelloWorld类在HelloWorldScene.h中有定义。 它是继承自CCLayer类这个类一般称作:层。CCLayer类的一些资料请移步cocos2d-x官网:http://cn.cocos2d-x.org/document/index/class?url=d9/d66/classcocos2d_1_1_c_c_layer.html 这里面有介绍。先看 HelloWorld::scene()这个函数吧:

函数中的第一条语句是 CCScene *scene = CCScene::node(); 它就是调用CCScene::node()创建一个场景。这个函数是这样的:

cocos2d win32 helloworld 解析

第二条语句是 HelloWorld *layer = HelloWorld::node(); 就是调用HelloWorld的父类CCLayernode()函数,创建一个层。这个函数源码如下所示:

cocos2d win32 helloworld 解析

第三条语句就是把创建好的层layer添加到场景scene中。 最后一句就是返回这个场景啦。

LAYER_NODE_FUNC(CMyFirstScene); 这个宏在引擎内部(CCLayer.h)被定义。主要是为自己建的层增加一个node()函数,node()函数的作用是new一个实例,并将它加入autorelease,也就是所有由node()函数得来的指针,都不需要手动的释放(除非自己想要)



接下来看看 HelloWorld::init()函数。 在init中 你需要初始化你的实例。也就是一些游戏对象。比如菜单、主角这些的。这个函数大概分为三部分。

第一部分就是执行父类的 init()函数。 第二部分就是添加一个退出按钮。第三部分是添加了一个Label和一个SpriteLabel用来显示文字,Sprite用来显示一张图片。具体的看下面的注释。

第一部分:

cocos2d win32 helloworld 解析

第二部分:

cocos2d win32 helloworld 解析

第三部分:

cocos2d win32 helloworld 解析

注意一下 addChild() 这个函数。给它传两个参数的时候 this->addChild(pMenu, 1); this->addChild(pLabel, 1); this->addChild(pSprite, 0); 这三个语句都是上面那个函数中的。第一个产生不需要多说明。关键是第二个参数。第二个参数代表什么呢? 其实这个参数决定了绘制的先后顺序。 数字越小就越先绘制,也就是说绘制在最底下。后绘制的会遮盖掉先绘制的,也就是说后绘制的叠加在先绘制的上面。

忘了说了 addChild()这个函数来自CCNode类。 它们之间的关系是 CCNode类是 CCLayer的父类,而CCLayerHelloWorld的父类。 通俗点讲:HelloWorldCCNode的孙子。想了解CCScene, CCLayer, CCSprite, CCNode这几个类的关系,请移步 porsche880828的专栏 的博客:http://blog.csdn.net/porsche880828/article/details/6971876



好了,HelloWorld工程就解析到这了。下面稍微总结一下:

cocos2d win32 helloworld 解析

相关文章:

  • 2021-08-08
  • 2022-12-23
  • 2021-10-08
  • 2021-12-31
  • 2022-03-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-21
  • 2021-11-19
  • 2021-05-27
  • 2019-03-24
  • 2022-12-23
  • 2021-08-02
  • 2021-05-23
相关资源
相似解决方案