原文:http://blog.csdn.net/u013271921/article/details/46048455
自己学了快两个月的cocos2d-x了,前几天自己看着教学视频,跟着做了一个小游戏——别踩白块。
今天来说一说我自己是如何写这个项目的。逻辑有点乱,不知道看不看得懂。。。。
首先,这个游戏有两个场景,一个是开始场景,一个是失败场景。
开始场景如下:
开始场景里面有三类块:
- 起始块(黄色,有Start Game)
- 正常块(黑白块)
- 结束块(绿色,有You Win)
起始块如下:
正常块如下:
结束块如下:
因为这个游戏都是以块为单位的所以可以将这些块统称为抽象块,所以要给块来写一个 create 方法如下:
<code class="hljs sql has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">static Block * <span class="hljs-operator" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">create</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Size</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">size</span>,Color3B color,String str, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">float</span> strSize,Color3B strColor);</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">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 class="hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#ifndef __Block_H_</span> <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#<span class="hljs-keyword" style="box-sizing: border-box;">define</span> __Block_H_</span> <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#include "cocos2d.h"</span> USING_NS_CC; class Block : <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> Sprite { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span>: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> Block * <span class="hljs-title" style="box-sizing: border-box;">create</span>(Size size,Color3B color,String str, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">float</span> strSize,Color3B strColor); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> init(Size size,Color3B color,String str, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">float</span> strSize,Color3B strColor); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//类内部静态成员在单独的内存里的,</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//在定义的时候已经存在了,它不属于某一个对象,只属于这个类</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> Vector<Sprite *> vec; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//用来存放已经创建好的块</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> Vector<Sprite *> getBlockVector(); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//产生get方法和set方法</span> CC_SYNTHESIZE(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>,_LineIndex,LineIndex); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//向下移动块,并且清除</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> moveDownAndCleanUp(); }; <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#<span class="hljs-keyword" style="box-sizing: border-box;">endif</span></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li></ul>
将 Block 类写好后,就可以开始写游戏逻辑了。
- 游戏一开是就进入开始场景,只要玩家一开始点击黑块游戏就会开始。
- 玩家只能按顺序点击黑块,即每次都是点击最下面的黑块。
- 玩家只要正确地点击了黑块,那个被点击的黑块就会变成灰色,
被点击那一行块就会往下移动,并且在屏幕上方添加一新行。 - 玩家在点击玩所有的黑块后,即赢得胜利,出现结束块。
- 若玩家点到了白块则游戏失败,切换到游戏失败的场景。
失败场景如下:
开始游戏,我们需要将屏幕最开始的布局给设置好,大家可能已经注意到 Block 类中有一个行号函数
<code class="hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">CC_SYNTHESIZE(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>,_LineIndex,LineIndex);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>
行号函数就是用来设置(set)和得到(get)块的行号的,行号在屏幕上只有0到3行,
如下图所示
首先我们需要三个函数,分别添加开始块,正常块和结束块。
在开始的布局中第0行添加开始块,第 1,2,3行添加正常块。
在点击完所有的黑块后添加结束块。
添加开始块的函数如下:
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">void</span> LayerGame<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::addStartLineBlock</span>() { Size startBlockSize <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> Size(winSize<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>width,winSize<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>height/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>); Block <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> b <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> Block<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::create</span>(startBlockSize, Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::YELLOW</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Start Game"</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">30</span>, Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::BLUE</span>); b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setPosition(Point(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>)); this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>addChild(b); b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setLineIndex(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置行号为0</span> _lineCount<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">++</span>;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//行数+1,注意,不是行号,行号只有0,1,2,3这4行,而行数可以一直增加</span> }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li></ul>
添加正常块的函数如下:
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">void</span> LayerGame<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::addNormalLineBlocks</span>(int LineIndex) { Size normalBlockSize <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> Size(winSize<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>width/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>,winSize<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>height/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>); int idx <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> rand()<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">%</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//取一个0到3之间的随机值</span> for(int i <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; i <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>; i<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">++</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//一下添加一行,即4块</span> { Block <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> b <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> Block<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::create</span>(normalBlockSize, i <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> idx <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">?</span> Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::BLACK</span> : Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::WHITE</span>,<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*设置黑白块*/</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">30</span>, Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::WHITE</span>); b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setLineIndex(LineIndex); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//根据 i 和 LineIndex 来设置位置</span> b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setPosition(Point( i <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> winSize<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>width/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>, LineIndex <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> winSize<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>height/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span> ) ); this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>addChild(b); } _lineCount<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">++</span>;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//行数+1</span> }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li></ul>
添加结束块的函数如下:
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">void</span> LayerGame<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::addEndLineBlock</span>() { Block <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> b <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> Block<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::create</span>(winSize,Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::GREEN</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"You Win!"</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">50</span>,Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::RED</span>); b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setAnchorPoint(Point(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>)); b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setPosition(Point(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>,winSize<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>height)); this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>addChild(b); b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setLineIndex(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>); _lineCount<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">++</span>;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//行数+1</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//添加两个按钮 Again 和 Exit</span> LabelBMFont <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> bm <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> LabelBMFont<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::create</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Again"</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"fonts/arial-unicode-26.fnt"</span>); LabelBMFont <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> bm1 <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> LabelBMFont<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::create</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Exit"</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"fonts/arial-unicode-26.fnt"</span>); MenuItem <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> again <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> MenuItemLabel<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::create</span>(bm); MenuItem <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> ext <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> MenuItemLabel<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::create</span>(bm1); again<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setTarget(this,menu_selector(LayerGame<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::tryAgainCallback</span>)); ext<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setTarget(this,menu_selector(LayerGame<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::exitCallback</span>)); Menu <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> menu <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> Menu<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::create</span>(again,ext,<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NULL</span>); b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>addChild(menu); menu<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setPosition(Point<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::ZERO</span>); again<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setPosition(Point(again<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>getBoundingBox()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>size<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>width/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>, winSize<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>height<span class="hljs-attribute" style="box-sizing: border-box;">-again</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>getBoundingBox()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>size<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>height/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)); ext<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setPosition(Point(winSize<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>width<span class="hljs-attribute" style="box-sizing: border-box;">-ext</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>getBoundingBox()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>size<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>width/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>, winSize<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>height<span class="hljs-attribute" style="box-sizing: border-box;">-ext</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>getBoundingBox()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>size<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>height/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)); }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li></ul>
到这里,我们就可以设置好最开始的布局了,写一个StatGame函数如下:
<code class="hljs scss has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">void LayerGame<span class="hljs-value" style="box-sizing: border-box;">::startGame() { addStartLineBlock();</span> <span class="hljs-function" style="box-sizing: border-box;">addNormalLineBlocks(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>)</span>; <span class="hljs-function" style="box-sizing: border-box;">addNormalLineBlocks(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)</span>; <span class="hljs-function" style="box-sizing: border-box;">addNormalLineBlocks(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>)</span>; }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul>
现在来有了最开始的布局了,就可以开始写点击事件了,因为我看的视频教程是cocos2d-x3.0以下的版本,而我自己用的却是3.0的版本,所以,就造成了我写的代码3.0以下的版本和3.0版本的混搭……
首先设置触摸监听:
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//3.0版本</span> auto listener <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> EventListenerTouchOneByOne<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::create</span>(); listener<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setSwallowTouches(<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//吞噬</span> listener<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>onTouchBegan <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> CC_CALLBACK_2(LayerGame<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::onTouchBegan</span>,this); this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>_eventDispatcher<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>addEventListenerWithSceneGraphPriority(listener,this);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>
然后在写点击事件函数:
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">bool LayerGame<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::onTouchBegan</span>(Touch <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span>touch, Event <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span>unused_event) { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//遍历所有存在vec中的块 C++11方法</span> for (auto obj : Block<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::getBlockVector</span>()) { Block <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> b <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> (Block <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span>)obj; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//判断是否点击到该块,且行号为1</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>boundingBox()<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>containsPoint(touch<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>getLocation()) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&&</span> b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>getLineIndex() <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>getColor() <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::BLACK</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//点到黑块</span> { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//播放音效</span> SimpleAudioEngine<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::getInstance</span>()<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>playEffect(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"onclick.wav"</span>); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//开始计时</span> this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>startTimer(); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//将被点击的黑块变灰</span> b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setColor(Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::GRAY</span>); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//被点击的这行下移</span> this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>moveDown(); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>getColor() <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::GREEN</span> )<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//点到结束块</span> { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//播放音效</span> SimpleAudioEngine<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::getInstance</span>()<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>playEffect(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"gamewin.wav"</span>); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//终止计时</span> this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>stopTimer(); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//下移</span> this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>moveDown(); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>getColor() <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::WHITE</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//点到白块</span> { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//播放音效</span> SimpleAudioEngine<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::getInstance</span>()<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>playEffect(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"wrong.wav"</span>); Scene <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> scene <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> LayerFailed<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::scene</span>(); Director<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::getInstance</span>()<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>replaceScene(scene);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//切换到失败场景</span> } break; } } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>; }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li></ul>
现在看看点击事件函数的中的 moveDown 函数:
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">void</span> LayerGame<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::moveDown</span>() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>getLineCount() <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">20</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//如果行号小于20</span> { this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>addNormalLineBlocks(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//则添加一正常行,并设置行号为4</span> } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!</span>showEnd)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//如果行号不小于20且标志showEnd为false</span> { this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>addEndLineBlock();<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//则添加结束块</span> showEnd <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//并将showEnd设置为true</span> } for (auto obj : Block<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::getBlockVector</span>())<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//遍历这一行所有块</span> { Block <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> b <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> (Block <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span>)obj; b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>moveDownAndCleanUp();<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//将他们下移且从渲染树中删除</span> } }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li></ul>
moveDown函数中又有一个moveDownAndCleanUp函数,我们把它写在了Block类里面
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">void</span> Block<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::moveDownAndCleanUp</span>() { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//行号减1,因为这个函数是在moveDown函数的for循环里面,所以vec中所有的行号都减1</span> _LineIndex<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">--</span>; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//下移动作(时间,位移距离)</span> MoveTo <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> MoveTo<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::create</span>(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.01</span>, Point(getPositionX(), getPositionY()<span class="hljs-attribute" style="box-sizing: border-box;">-winSize</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>height/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>)); this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>runAction(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span>);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//执行动作</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (_LineIndex <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//判断当前行号是否小于0</span> { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//从渲染树上拿下来</span> this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>removeFromParentAndCleanup(<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//从vec中删除当前块</span> vec<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>eraseObject(this); } }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li></ul>
上面moveDown函数和moveDownAndCleanUp函数都是为了实现玩家在点击时的滚屏效果。
前面说的都是游戏顺利完成的情况,下面来说,游戏失败的情况——在点击到白块时,游戏失败
我们用了一个 if 语句来判断是否点击到了白块:
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>getColor() <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::WHITE</span>) { SimpleAudioEngine<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::getInstance</span>()<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>playEffect(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"wrong.wav"</span>); Scene <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> scene <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> LayerFailed<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::scene</span>(); Director<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::getInstance</span>()<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>replaceScene(scene); }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>
如果踩到白块,则播放 wrong 音效,并且切换到游戏失败的场景。
补充,在游戏中我们还加入了计时功能和播放音乐的功能
首先说说计时功能:
1.首先设置一个标志和一个变量
<code class="hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">long</span> startTime = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//全部变量</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> isRunning = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//全局变量</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>
2.再创建一个 Label 来显示时间
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">LabelTTF <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> ttf <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> LabelTTF<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::create</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"0.000"</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Courier New"</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">30</span>); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//ttf为全局变量</span> ttf<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setZOrder(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">100</span>); ttf<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setPosition(Point(winSize<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>width/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>,winSize<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>height <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">20</span>)); ttf<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setColor(Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::BLUE</span>); this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>addChild(ttf);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>
3.然后再 写两个函数计时器startTimer和stopTimer
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">void</span> LayerGame<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::startTimer</span>() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!</span>isRunning)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置标志,只让其运行一次</span> { this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>scheduleUpdate();<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//开始帧循环定时器,每一帧都会调用默认的update函数</span> startTime <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> clock();<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//获取系统当前时间</span> isRunning <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>; } } <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">void</span> LayerGame<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::stopTimer</span>() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (isRunning)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//只让其运行一次</span> { this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>unscheduleUpdate();<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//关闭帧循环定时器</span> } }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li></ul>
4.然后将startTimer与stopTimer分别放入触摸响应函数的 if 条件中
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>getColor() <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::BLACK</span>) { SimpleAudioEngine<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::getInstance</span>()<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>playEffect(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"onclick.wav"</span>); this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>startTimer();<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//开启计时器</span> b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setColor(Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::GRAY</span>); this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>moveDown(); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>getColor() <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::GREEN</span> ) { SimpleAudioEngine<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::getInstance</span>()<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>playEffect(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"gamewin.wav"</span>); this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>stopTimer();<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//关闭计时器</span> this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>moveDown(); } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li></ul>
再说说播放音乐的功能:
1.首先要包含头文件
<code class="hljs php has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#include "SimpleAudioEngine.h"</span> using <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">namespace</span> <span class="hljs-title" style="box-sizing: border-box;">CocosDenshion</span>;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>
2.再在相应部分加入播放音效的代码
<code class="hljs lasso has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>getColor() <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::BLACK</span>) { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//播放点击音效</span> SimpleAudioEngine<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::getInstance</span>()<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>playEffect(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"onclick.wav"</span>); this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>startTimer(); b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>setColor(Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::GRAY</span>); this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>moveDown(); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>getColor() <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::GREEN</span> ) { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//播放胜利音效</span> SimpleAudioEngine<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::getInstance</span>()<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>playEffect(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"gamewin.wav"</span>); this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>stopTimer(); this<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>moveDown(); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>getColor() <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> Color3B<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::WHITE</span>) { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//播放失败音效</span> SimpleAudioEngine<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::getInstance</span>()<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>playEffect(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"wrong.wav"</span>); Scene <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> scene <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> LayerFailed<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::scene</span>(); Director<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::getInstance</span>()<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>replaceScene(scene); } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li></ul>
好了,到这里差不多完成了。上面给了一些代码片段,若需要看完整代码,请移步至:(github)别踩白块
写得有点乱,若有不足之处还请斧正。