cocos2d win32 helloworld 解析

   

     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的主要功能有下面几个:
    1initInstance() 初始化程序,构建运行窗口;
    2applicationDidFinishLaunching() 程序初始化完毕通知;
    3applicationDidEnterBackground()  程序被切换到后台通知;
    4applicationWillEnterForeground() 程序切换到前台通知;
    5setOrientation(Orientation orientation) 设置屏幕窗口原点:设备是水平的还是垂直的,在左边还是在右边(或者顶端还是底部)
    6run() 程序运行(进行消息循环处理)
    7getCurrentLanguage() 取得当前语言配置
    8sharedApplication() 所有对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.csdn.net/porsche880828/article/details/6971876



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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值