cocos2d win32 helloworld 解析

本文详细解析了Cocos2d-x游戏开发环境的搭建过程及HelloWorld程序的工作原理,介绍了关键类如CCApplication、AppDelegate等的功能,并深入分析了HelloWorld类的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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


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


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



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

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

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


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

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



注意一下上面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()创建一个场景。这个函数是这样的:

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


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

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



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

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

第一部分:

第二部分:

第三部分:


注意一下 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.youkuaiyun.com/porsche880828/article/details/6971876



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

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


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


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



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

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

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


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

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



注意一下上面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()创建一个场景。这个函数是这样的:

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


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

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



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

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

第一部分:

第二部分:

第三部分:


注意一下 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.youkuaiyun.com/porsche880828/article/details/6971876



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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值