您的位置:首页 >> Cocos2d-x >> 和屌丝一起学cocos2dx-Hello World
和屌丝一起学cocos2dx-Hello World
[ 孤狼 | 2015-02-09 16:55:49 | Cocos2d-x ]

声  明


       本教程仅用于初学cocos2dx同学使用,内容由本人(孤狼)学习过程中笔记编写,本教程使用cocos2dx版本为2.1.4。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。

gl.paea.cn版权所有。


       Hello,我又回来啦,上节我们讲到“和屌丝一起学cocos2dx-开发基础”,相信你已经会使用vs来开发cocos2dx项目了,那么这节我们就开始进入神奇的cocos2dx世界吧。当然了,就像所有的语言与程序开发一样,我们从组基本的 Hello World 输出说起。


       在cocos2dx项目中,框架已经为我们写好了“Hello World”输出示例,我们不必先学然后在用,直接来运行一下我们的项目,你就能看到这个示例:

       插个小插曲,我想很多人和我一样以为cocos2dx的标志是一个外星人。其实.....他丫的是一个椰子..


       好了,这个界面我和大家说下有哪些东西,首先呢,最上面的是一个文字输出 Hello World。然后一个背景图片,右下角是一个退出按钮,左下角是一些数据信息,“3” 是指当前有3个“对象”,“0.000”是指每一帧所用的时间,“60.0”是指当前的刷新频率是60帧每秒。


       那么接下来我们去看看代码。


【一】:程序的血和肉--基本组成


       在看代码之前,先和大家说下cocos2dx的组成成分。

       cocos2dx项目中由以下4个基本组成成分:CCSprite(精灵)、CCLayer(层)、CCScene(场景)、CCDirector(导演)。哇哦,我第一次了解的时候还以为这是要拍戏呢,是不是哈利波特又要拍续集了,怎么导演精灵都来了。其实呢,这是cocos2dx开发组想要的结果,没错,就是拍戏,让游戏像拍戏一样来建立(不知道是不是投资商里有XX剧组)。这样其实是更有利于大家来理解,避免了大多MVC架构的框架那样,说起来云里雾里,让新手更直观的去理解程序。其实基本组成成分里还有一个一直被大家忽略,那就是一部剧的灵魂--编剧。而我们,就是这部剧的灵魂。(看什么看,导演你也要按我的剧本走,还不快去拍戏.....


       现在我来和大家慢慢说说这4个组成成分的功用吧。


1:精灵。

       精灵其实就是我们说的元素。比如一个游戏里的一个人物啊,一只笔啊什么的。这个很好理解的。


2:层。

       层在cocos2dx项目里是精灵以外出现的最多的元素。比如一个游戏,你需要背景层,一个精灵要运动,就要单独一个层,游戏有暂停的页面,那就来个暂停页面的层。层就像是一张透明的玻璃一样,把他们画上东西,摞在一起,俯视来看,就是一个完整的游戏了。用过PS的就直接理解成PS里的图层,和那个基本是异曲同工之处。还是不理解的我画了个图示一起来看看。

       好这里我们看到的是一个大海里有2条鱼。那么怎么理解层的意义呢?我们来分解一下。首先是一个背景层,它只用来显示背景。

       然后是一个鱼层。

       最后我们把这些层摞在一起。

       就看到我们的游戏了,好了层的意义你懂了吗?


3:场景。

       为毛我第一次打出来搜狗直接显示是“苍井空”呢?为什么呢?

       好了闲话不多说,如果们把层理解为玻璃片,那么场景就是一个箱子,我们把玻璃片放在这个箱子里,去组建游戏。一个游戏会有很多的场景,比如,主界面,游戏界面,载入界面等等。一个场景包含多个层,一个层可能包含多个精灵。


4.导演。

       就和现实中的导演一样,这里的导演也是起到指导的作用的,导演在这里负责的就是让不同的场景切换,同时它也是游戏的核心,控制整个游戏的流程,包括开始,继续,暂停等。


       好了说完上面这些,我们开始说cocos2dx的Hello World吧。


【二】Hello World


       我们打开程序下的HelloWorldScene.h文件,我们可以看到以下内容。

       这里,最上面3行都是在引用文件我们就不多说了。然后我们看到的是类的创建。

       当然,这里的是个层类,所以直接继承cocos2d下的CCLayer方法。

       之后要做的就是设定内部的元素了。

       virtual bool init();

       这个是用来初始化函数的。

       static cocos2d::CCScene* scene();

       这里呢,是设置一个静态的场景函数。

       void menuCloseCallback(CCObject* pSender);  

       这里是设置一个菜单的回调函数。

       CREATE_FUNC(HelloWorld);                              

       这里是一个关键这个是一个创建对象的代码,他会自动创建对象,如果失败会自动回收内存,如果回收内存也失败的话,他会自动的删除对象。


       之后我们去看看HelloWorldScene.cpp文件。



       这里我就不解释啥了,都用中文给注释好了,嘿嘿。够清晰了吧。顺便说几个大家可能看不懂的代码。


1.pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20));

       这里可能大家会郁闷设置关闭的菜单项,我看的的是在右下角啊,X坐标可以理解,为啥Y是20呢?这里要说明的是cocos2dx的零坐标是左下角,而不是其他软件常用的左上角。

       另外如果有人细心可能就会发现为啥才20呢?那个图片大约是40像素啊?

       这里还要说明的是,cocos2dx的对象坐标起点就是这个对象的正中心点,就是两条对角线的交叉点。


2.this->addChild(pMenu, 1);

       前面的能看懂,最后的那个“1”是个啥玩意儿啊?

       这个啊,是层内部的 Z 坐标。大家回到教程头部看看那张运行图,文字是不是在图片的上面。这就是这个参数的作用,数字越大,就越靠上,文字的是“1” 椰子图片的是“0”,所以文字在椰子图片上面。


       好了今天就到这里,困死了,睡觉了,おやすみ!

       


转载请注明出处:http://gl.paea.cn/cocos2d-x/content/2015/02/09/7.html