书生教你cocos2d-x-入门篇(一)

从这篇博文开始,我们就要做游戏了。开始之前啰嗦两句,入门篇暂定20个小游戏,从简到难。为了减少学习难度,每个小游戏大概加入1-10个新的知识点进来,不愿意去看cocos2d-x的源码的朋友们可以偷偷懒了,但是对于自学能力较强的朋友,跟这篇教程走就有点坑爹了。基本上都是介绍如何使用cocos2d-x的常用类,不涉及引擎以外的知识点,譬如说我会给大家展示动作抑或动画的使用,不会专门教大家寻路算法(但是有可能会涉及)。不过写游戏难免会用到一些游戏设计,代码设计的概念,譬如屏幕自适应,譬如寻路,譬如消息机制(尽量避免吧)。

很多人学代码,喜欢马上动手敲键盘,尽快看到东西,这样其实没有先仔细把源码的设计思路过一遍来的好,不过如果我一直这么唧唧歪歪我的博客就没人看了,所以赶紧上图。

看看我们这次做什么游戏。

大家记得下载源码。

项目结构里就一个游戏场景类(主要内容在这里)和主界面类(跟helloworld差不多)。

在上篇博文里,我们讲解了helloworld的结构,大家应该了解了如何创建scene,layer及sprite。暂时还比较少,不过加几个知识点进来我们也可以做个小游戏了。

我们要做的是一个打气球的小游戏,由于可能分三部分:

第一部分是主界面,我们把helloworld改改,写个游戏主界面,里面就一个背景一个标题和一个按钮,点击按钮会切换到游戏场景。这部分主要是巩固知识,让大家再熟悉一下创建场景和精灵。为了减少难度。我把那些屏幕自适应的东西都去了,并且设置视图大小固定

为480X320,大家不要考虑屏幕分辨率问题(实际做游戏这样是不行的)。基本上是一个简化了的helloworld。

第二部分是游戏场景,要多加几个知识点,由于篇幅限制,可能要在下一篇博文里讲解。

第三部分会讲解屏幕适配,篇幅允许的话会给游戏加上音效,或粒子(看情况吧),肯定要单开一篇文章。

打开AppDelegate.cpp

看,我把那些杂七杂八的都删掉了,重点只有这么2句,创建一个MainUi::scene返回的场景这个里面有个MainUi类的实例化对象(继承了CCLayer)

先看main_ui.h

MainUi类的结构非常简单,和helloworld非常类似,ClickBtnCallback是点击开始游戏按钮的回调函数,里面执行切换场景操作。基本内容都在init()函数里。

打开main_ui.cpp看实现内容

看,删掉了乱七八糟的代码,简短多了。MainUiScene是静态函数创建一个scene,在里面塞一个MainUi,然后返回。

ClickBtnCallback是点击按钮的回调函数,内容是切换场景。重点在init()函数里

首先创建一个精灵作为背景,加入layer。

bacground->setAnchorPoint(ccp(0,0));

bacground->setPosition(ccp(0,0));

setAnchorPoint(0,0)是设置精灵的锚点

知识点:

AnchorPoint是一个重要的概率,当我们说一个的坐标是(x,y)时,具体是指它的哪个点在x,y处呢。精灵是一个矩形,当显示时,精灵是左下角在x,y点还是右上角在x,y点还是中间呢?这就取决与于AnchorPoint。

精灵是个矩形,构成一个方框,我们可以认为方框的左下角点为(0,0)右上角点为(1,1),他的锚点由(a_x,a_y)组成,一般这2个数的范围都在[0,1]之间。这2个数决定了我们在精灵内部,取哪个点来标识精灵位置,作为精灵自身坐标系的原点。当我们说精灵在x,y点时,如果精灵的锚点为(0,0),则显示效果为精灵的左下角点在x,y处,如果为(1,1),则精灵的右上角在x,y处,如果为(0.5,0.5)则精灵中间在x,y处,其他情况以此类推。

做张效果图,大家理解一下,然后回到我们的工程。

我们的背景图的锚点是(0,0),同时设置其坐标为(0,0)因此背景图的左下角会和屏幕左下角对齐,由于图片大小会480x320,所以刚好覆盖屏幕。

之后添加一个精灵title,作为标题,

Title没有设置锚点,所以默认是(0.5,0.5),它的中心点是它的坐标系原点,把它放在(240,210),屏幕中间偏上的位置。

最后创建一个按钮,和helloworld里的按钮相关代码相似。

创建了一个2张图片组成的开始按钮,和一个菜单层pMenu

按钮在菜单层pMenu里,pMenu在layer里,按钮的坐标在屏幕中间偏下位置

回调函数是ClickBtnCallback

至此,我们的主界面就完成了,总共几十行代码。

Ps:由于我白天还要上班,项目最近比较紧,晚上回家也很晚了,没法子一口气把一个游戏的内容全部写出来。更新速度比较慢,大家包涵一下。明后天更新游戏场景里的内容。

错别字和排版暂时无法校对,源码的工程配置和你的可能不同,需要重新配,或者建个工程把代码和资源拷贝进去就行了。