原文:http://www.jb51.cc/article/p-kimawtbd-bho.html
自己学了快两个月的cocos2d-x了,前几天自己看着教学视频,跟着做了一个小游戏——别踩白块。
今天来说一说我自己是如何写这个项目的。逻辑有点乱,不知道看不看得懂。。。。
首先,这个游戏有两个场景,一个是开始场景,一个是失败场景。
开始场景如下:
开始场景里面有三类块:
起始块(黄色,有Start Game) 正常块(黑白块) 结束块(绿色,有You Win) 起始块如下:
正常块如下:
结束块如下:
因为这个游戏都是以块为单位的所以可以将这些块统称为抽象块,所以要给块来写一个 create 方法如下:
<code >static Block * <span ><span >create</span>(<span >Size</span> <span >size</span>,color3B color,String str,<span >float</span> strSize,color3B strcolor);</span></code><ul ><li >1</li><li >2</li></ul>
这个函数里面有五个参数,第一个参数是块的大小 size ;第二个参数是块的颜色 color ;第三个参数是在块上要显示的字符串 str ;第四个参数是字符串的大小 strSize ;第五个参数是字符串的颜色 strcolor 。
我们创建块的时候要确定块的大小,如
起始块:宽为,winSize.wIDth;高为,winSize.height/4 正常块:宽为,winSize.wIDth/4;高为,winSize.height/4这里除以4是将屏幕给分成了4×4个正常块 结束块:宽为,winSize.wIDth;高为,winSize.height
注意:这里的 winSize 就是屏幕的大小。
现在把 Block 类写好:
<code ><span >#ifndef __Block_H_</span><span >#<span >define</span> __Block_H_</span><span >#include "cocos2d.h"</span>USING_NS_CC;class Block : <span >public</span> Sprite{<span >public</span>: <span >static</span> Block * <span >create</span>(Size size,color3B strcolor); <span >bool</span> init(Size size,color3B strcolor); <span >//类内部静态成员在单独的内存里的,</span> <span >//在定义的时候已经存在了,它不属于某一个对象,只属于这个类</span> <span >static</span> Vector<Sprite *> vec; <span >//用来存放已经创建好的块</span> <span >static</span> Vector<Sprite *> getBlockVector(); <span >//产生get方法和set方法</span> CC_SYNTHESIZE(<span >int</span>,_lineIndex,lineIndex); <span >//向下移动块,并且清除</span> <span >voID</span> moveDownAndCleanUp();};<span >#<span >endif</span></span></code><ul ><li >1</li><li >2</li><li >3</li><li >4</li><li >5</li><li >6</li><li >7</li><li >8</li><li >9</li><li >10</li><li >11</li><li >12</li><li >13</li><li >14</li><li >15</li><li >16</li><li >17</li><li >18</li><li >19</li><li >20</li><li >21</li><li >22</li><li >23</li><li >24</li><li >25</li></ul>
将 Block 类写好后,就可以开始写游戏逻辑了。
游戏一开是就进入开始场景,只要玩家一开始点击黑块游戏就会开始。 玩家只能按顺序点击黑块,即每次都是点击最下面的黑块。 玩家只要正确地点击了黑块,那个被点击的黑块就会变成灰色,被点击那一行块就会往下移动,并且在屏幕上方添加一新行。 玩家在点击玩所有的黑块后,即赢得胜利,出现结束块。 若玩家点到了白块则游戏失败,切换到游戏失败的场景。
失败场景如下:
开始游戏,我们需要将屏幕最开始的布局给设置好,大家可能已经注意到 Block 类中有一个行号函数
行号函数就是用来设置(set)和得到(get)块的行号的,行号在屏幕上只有0到3行,
如下图所示
首先我们需要三个函数,分别添加开始块,正常块和结束块。
在开始的布局中第0行添加开始块,第 1,2,3行添加正常块。
在点击完所有的黑块后添加结束块。添加开始块的函数如下:
<code ><span >voID</span> LayerGame<span >::addStartlineBlock</span>(){ Size startBlockSize <span >=</span> Size(winSize<span >.</span>wIDth,winSize<span >.</span>height/<span >4</span>); Block <span >*</span> b <span >=</span> Block<span >::create</span>(startBlockSize,color3B<span >::YELLOW</span>,<span >"Start Game"</span>,<span >30</span>,102); Box-sizing: border-Box;">::BLUE</span>); b<span >-></span>setposition(Point(<span >0</span>,102); Box-sizing: border-Box;">0</span>)); this<span >-></span>addChild(b); b<span >-></span>setlineIndex(<span >0</span>);<span >//设置行号为0</span> _lineCount<span >++</span>;<span >//行数+1,注意,不是行号,行号只有0,1,2,3这4行,而行数可以一直增加</span>}</code><ul ><li >1</li><li >2</li><li >3</li><li >4</li><li >5</li><li >6</li><li >7</li><li >8</li><li >9</li><li >10</li><li >11</li><li >12</li><li >13</li></ul>添加正常块的函数如下:
添加结束块的函数如下:
到这里,我们就可以设置好最开始的布局了,写一个StatGame函数如下:<code >voID LayerGame<span >::startGame(){ addStartlineBlock();</span> <span >addnormallineBlocks(<span >1</span>)</span>; <span >addnormallineBlocks(<span >2</span>)</span>; <span >addnormallineBlocks(<span >3</span>)</span>;}</code><ul ><li >1</li><li >2</li><li >3</li><li >4</li><li >5</li><li >6</li><li >7</li></ul>现在来有了最开始的布局了,就可以开始写点击事件了,因为我看的视频教程是cocos2d-x3.0以下的版本,而我自己用的却是3.0的版本,所以,就造成了我写的代码3.0以下的版本和3.0版本的混搭……
首先设置触摸监听:
然后在写点击事件函数:
现在看看点击事件函数的中的moveDown函数:
moveDown函数中又有一个moveDownAndCleanUp函数,我们把它写在了Block类里面
上面moveDown函数和moveDownAndCleanUp函数都是为了实现玩家在点击时的滚屏效果。
前面说的都是游戏顺利完成的情况,下面来说,游戏失败的情况——在点击到白块时,游戏失败
我们用了一个if语句来判断是否点击到了白块:如果踩到白块,则播放 wrong 音效,并且切换到游戏失败的场景。
补充,在游戏中我们还加入了计时功能和播放音乐的功能
首先说说计时功能:
1.首先设置一个标志和一个变量
2.再创建一个 Label 来显示时间3.然后再 写两个函数计时器startTimer和stopTimer4.然后将startTimer与stopTimer分别放入触摸响应函数的if条件中
再说说播放音乐的功能:1.首先要包含头文件
<code ><span >#include "SimpleAudioEngine.h"</span>using <span >namespace</span> <span >CocosDenshion</span>;</code><ul > 2.再在相应部分加入播放音效的代码好了,到这里差不多完成了。上面给了一些代码片段,若需要看完整代码,请移步至:(github)别踩白块
写得有点乱,若有不足之处还请斧正。
总结以上是内存溢出为你收集整理的Cocos2d-X之别踩白块全部内容,希望文章能够帮你解决Cocos2d-X之别踩白块所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)