这一章将介绍一款特别经典的小游戏,同时也会教大家如何将游戏打包成apk文件
本文仅供个人记录和复习,不用于其他用途
前言
之前的项目实战贴出了所有的源码,而一些游戏的重要部分讲的不是很清楚,代码太多看起来也头晕。所以呢,这一章开始我只会解析一些重要的部分,源码我已开源至GitHub
游戏设计
看看下面的游戏界面,其实基本的元素很好判断,先自己想想一下要做什么,再接着往下看。
想好了吗?主要分为几个要素:
- 总分数记录和变动
- 卡片的数字和位置变动
- 判断游戏结束
- 重来和退出
其实第一和第四条我们在之前已经做过类似的,实现起来很容易,最主要的还是卡片和游戏结束的判断。游戏的主界面我做成了一张大图:
我们只需要设计一个卡片类,然后生成16张卡片放到对应的位置即可。当然,你可能会问,卡片的合并操作怎么办。其实我们只需要按照一下的规则即可:
- 朝一个方向滑动时,若前方为空,那么将所有卡片全部顶格
- 若相邻的卡片数字相同,那么将它们合并
- 每张卡片只能合并一次
注意,假如有四张卡片都是4,当它们合并时,只会合并出两张8,而不是一张16。
具体实现
游戏其实不难,之前我就用C语言实现了一遍,虽然命令行看起来很是蛋疼,不过确实可以玩。下面将就游戏主要的代码进行解析。
卡片类
卡片类只需要做到创建、修改分数、获取分数即可。当然,我们也需要根据对应的数字来修改背景颜色和字体大小。其实最开始我是直接将分数和卡片合在一起,这样就不需要自己再加数字上去,方便很多。但是呢,如果这么做那么游戏的可玩性就大打折扣,玩到2048就只能够判定游戏结束了。为了游戏能够继续玩下去,我只做了卡片的背景色,数字就是根据分数添加上去,这样就能够玩出几万分这种吧。
这里我们有一个setNum()的方法,根据传入的分数,来修改精灵的图片,并且修改数字。要注意的是,2和4是棕色的,其他的数字都是白色的,这个主要是因为背景色的缘故才这么做的。
|
|
我们用一个switch语句,就能轻松达到这种效果。当然你要是看不懂的话,那就得捧起C系列的语法书好好回顾一下。这里要注意的是,最好每一个部分都要修改一下颜色,我之前只在4和64中修改了颜色,这样就会出现当卡片变为128时,颜色还是棕色。
至于数字添加很简单,一个标签就可以做到,不过要记得把位置设在中心:
|
|
我这里还添加了动画效果,卡片出现和消失时会有变大和变小的动画,看起来更加生动一点:
|
|
这里只需要注意一点,当卡片数字为0时,调用hide()将其隐藏即可,数字为0是不显示,但不代表没有卡片。
手势识别
其实很简单,我们只需要获取触摸坐标,将它和触摸开始时的坐标进行对比即可:
|
|
有人可能会问,isLock是什么意思。要知道,玩家向一个方向进行滑动,不一定就是滑动了规定距离后停下来(这里TOUCH_LONG我设置的是30,你可以设小点,因为有人吐槽我做的这个游戏触屏不够灵敏)。那么,假如我们没有isLock进行锁定,而玩家拖动距离过长,那么很有可能会触发两次以上的触摸事件,这很明显不是我们想看到的。
分数合并操作
这里我就拿doLeft()进行举例:
|
|
我用了一个中间数组temp来存储一行(一次合并一行),既然是向左合并,那么就按照从左到右的顺序将cardArr存入temp。我们这里有一个很重要的标志,那就是棋盘是否发生了改变。如果棋盘发生了改变,那么很显然,我们就要根据temp来改变cardArr中的数字。其实大家很容易就能看出来,合并操作是在addTemp()中,doLeft()只是做一个修改卡片的作用。randomInit()就是随机在一个空位置生成2或4。
说完了doLeft(),我再来解释一下棋盘改变这个问题。比如你向左使劲划,一直划到棋盘没法滑动了,那么这个时候游戏应该不做任何反应,所以这个判断是很有必要的。
|
|
就像我之前说的,先把所有卡片全部顶格,然后相邻数字合并,最后把合并好的数字再顶格,这样就完成了一次移动操作。这里卡片移动以及数字合并都算作对棋盘的改变。
检测游戏结束
我用了一个帧循环来检测游戏是否结束,当然你也可以加在doLeft()、doRight()等等操作之中。
|
|
判断逻辑非常简单,只要有空位置,或者相邻且相等的数字,那么游戏就可以进行下去,否则游戏就结束。如果返回为false,那么我们就调用gameOver(),显示游戏结束画面(因为我比较懒,就只加了几个标签,没有额外做一个层)。
总结
一路看下来,游戏真的不难,就凭我大一上学期学的C语言就能做出来(而且我学的比较差2333),不过真正要实现一个游戏还是没有那么容易的。还是那句话,我们在做游戏之前要做好设计,不要盲目动手,不然你敲了半天代码会发现毫无用处。
游戏移植安卓平台
其实移植安卓平台很简单,首先我们要下载NDK、SDK、ANT,下载下来之后解压即可。为了方便起见,我们把文件夹名就改成它们的名字。随后我们启动Cocos2dx目录下的setup.py
(需要安装python2.7),也就是在目录下按住shift+右键打开命令行,然后执行python setup.py
。然后我们按照所给提示,依次输入NDK、SDK、ANT的文件路径,但是这里ANT需要定位到它里面的bin
文件夹,其他两个直接就是根目录即可。
设置完毕后,我们来到游戏项目下,打开proj.android
,找到jni
下的Android.mk
。打开之后,修改里面的信息,这个是提供用户自定义的文件,不过我们只需要提供cpp文件即可。
退回到项目根目录,我们在此打开命令行,执行cocos run -p android
,然后等待完成,我们就可以在bin
下面找到打包好的apk文件。如果没有成功,我们就需要仔细查看信息,根据对应的信息修改错误。