多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## **第 3 章 打地鼠** * * * * * **教学制作**:一克拉 * * * * * **App作品下载**: * * * * * **视频教程**:稍候上传 * * * * * **效果说明**: 灵感来自一款经典的街机游戏Whac-A-Mole,其中的小动物会突然从洞中冒出,玩家则用木槌击打它们,击中得分。 ![](https://box.kancloud.cn/6278d8afc27adce46d46a428bc8bfbe4_240x189.png) * * * * * ![](https://box.kancloud.cn/dcea87edcd25adc292a2aac62bf1c698_400x619.jpg) APP界面截图 * * * * * **一、【学习目标】** “打地鼠”应用将实现以下功能: 1. 一只地鼠随机出现在屏幕上,每秒钟移动一次; 2. 手指触到地鼠,则让设备震动,显示的命中数加1,地鼠随机移动到新位置; 3. 手指触屏但没点击中地鼠,则显示失败数加1; 4. 点击“重新开始”按钮,游戏重新开始,命中和失败的计数归零。 **二、学习内容** 1. ImageSprite组件:具有触感的可移动图像;(精灵) 2. Canvas组件:容纳ImageSprite的平台;(画布) 3. Clock组件:用来计时,让sprite随即移动;(计时传感器) 4. Sound组件:击中地鼠时产生震动;(音效) 5. Button组件:开始新游戏;(按钮) 6. Procedures:用来实现一系列的指令,可以重复调用,如移动地鼠;() 7. 产生随机数; 8. 使用加法块(+)及减法块(-)。 **三、准备开始** **Step1: 素材准备** 准备1:萝卜坑背景图一张 准备2:三种Size地鼠图片各一张 准备3:准备一份音频文件作为打地鼠背景音乐 **Step2:界面设计(组件及布局)** ![](https://box.kancloud.cn/dcea87edcd25adc292a2aac62bf1c698_400x619.jpg) * * * * * ![](https://box.kancloud.cn/3070e818ba7b1d78a9cee1e3a359560d_441x832.png) 拖拽一张画布到屏幕上,为画布设置指定的高度和宽度,我这里设置了宽350,高400。接着,拖拽9个图像精灵到画布上 ,将图像精灵分别放在背景图中有坑的位置。将第一排地鼠的图像设置为mouse1.png、第二排设置为mouse2.png,第三排设置为mouse3.png,之所以没有用到同一个图像,是为了获得视觉体验的真实性,第一排地鼠最大,越往后地鼠越小。 * * * * * ![](https://box.kancloud.cn/8a6dcaea9e453d60e3ca232168584486_990x737.png) mouselist为列表类型变量,用来存放9只地鼠 play为一个开关逻辑变量,初始化设置为false,当play按钮被按下设置其为true score为数据类型变量,初识成绩为为0 endtime为数据类型变量,初识赋值60,单位为s,用来做游戏倒计时 music为一个开关逻辑变量,用来控制是否播放音乐 * * * * * **Step3: 逻辑块设计(块程序)** 1、初始化全局变量 ![](https://box.kancloud.cn/992bf11cf37644707a42453f349f53c2_360x250.jpg) (1)mouselist为列表类型变量,用来存放9只地鼠 (2)play为一个开关逻辑变量,初始化设置为false,当play按钮被按下设置其为true (3)score为数据类型变量,初识成绩为为0 (4)endtime为数据类型变量,初识赋值60,单位为s,用来做游戏倒计时 (5)music为一个开关逻辑变量,用来控制是否播放音乐 2、自定义一个过程 initialize ![](https://box.kancloud.cn/c4cadc6813c2b3a15f681638078f7ac6_635x617.png) ![](https://box.kancloud.cn/d08097e643aa70d159f3d920bdc052ac_435x330.png) (1)计时器要等到开始按钮被按下才启用 (2)开始按钮未被按下,将play设置为false (3)背景音乐按钮未被按下,将music设置为false (4)初始化score为0 (5)为列表变量mouselist初始化,相当于为列表赋值 (6)一开始想设置图像精灵全部不显示,因此,这里使用了一个循环,循环取列表中的图像精灵,将其显示状态设置为false,图像精灵通过索引值的方法来获得。而且这里用到了任意组件 (7)设置画布的画笔颜色为白色 (8)设置画布的线宽 (9)在背景图上画字“倒计时”,这里调用了“沿角度画字”这个方法,目的是让画出的字能够很好地显示在我们的背景图中 (10)在背景图上画字“分数” 3、设置屏幕初始化动作 ![](https://box.kancloud.cn/e4c51fa90ce530fc543616da609e72a5_226x91.png) (1)设计随机显示地鼠的过程 ![](https://box.kancloud.cn/4e3bce6981d273c67c738b3bc8e043d6_629x206.png) * * * * * ![](https://box.kancloud.cn/402ce11e3ec11f7c252fd43932877f28_525x514.png) 随机选择要显示的地鼠,这里同样用到了任意组件中的任意精灵的方法 任意组件的好处是我们不必为每一个组件设置重复的方法 * * * * * (2)设计地鼠隐藏过程 ![](https://box.kancloud.cn/1f66ba378324ee2b67ee1062a1c8a9bf_594x248.png) * * * * * 将传值进来的地鼠显示状态设置为false,也就是隐藏该地鼠 将分数增加1分 调用随机显示地鼠的过程 该过程需要接收一个参数number,number为地鼠的序号 * * * * * (3)设置精灵被触碰的动作 ![](https://box.kancloud.cn/fedb67a44152048121a87f8e45f3db45_793x398.png)当精灵被触碰,即调用hidemouse这个过程,并把地鼠的序号作为参数传过去,由于任意精灵中没有精灵触碰事件,因此9个精灵分别要写相应的程序去处理。 * * * * * (4)处理play按钮单击事件 ![](https://box.kancloud.cn/ea0c016de86466da3a4093090bed13d7_497x294.png) 将play开关设置为取反,即如果当前play为false,那么按下按钮则为true 如果play为true,则将play按钮的显示文本设置为“暂停”,启动计时器计时 否则,也就是play为false,则将play的显示文本设置为“开始”,停止计时器计时,并且显示警告信息“游戏暂停”,这个过程中play按钮充当了一个开关。 * * * * * (5)处理音乐按钮单击事件 ![](https://box.kancloud.cn/cc3a4a1388abcf7be0230f7a0ca2f85e_482x246.png) 这里的music逻辑变量也相当于一个开关,通过判断music的真假来播放音乐。 * * * * * (6)定义过程——“显示结果” ![](https://box.kancloud.cn/1cde374a6c44c55e7a06b08608e302a1_721x185.png) * * * * * (7)处理stop按钮单击事件 ![](https://box.kancloud.cn/234fbff51c7248ca4bd18b15de79de69_653x467.png) 当按下停止按钮,进行判断,如果剩余时间大于0,说明游戏没有结束,因此提醒用户“时间还没到,是否确定退出游戏?” 当用户选择退出,则停止计时器计时,停止音乐播放,显示最终成绩。 * * * * * (8)设置计时器计时 ![](https://box.kancloud.cn/c3cf97f4400210285f5bbb321e835019_567x331.png) ![](https://box.kancloud.cn/6e14a989dce05b93c286bcfeb8706f8b_517x587.png) 每隔1S,剩余时间-1 如果剩余时间为0,停止计时器计时,显示“时间到,游戏结束!”对话框;显示最后的结果,显示结果为一个单独的过程,将music、play、stop都设置为不启用 如果时间没有到,就继续显示倒计时间和分数,这里在调用画字过程之前都用到了清除画布,原因是如果不清除画布,画布上会留下上一次的文字痕迹~~不懂?自己把清除画布功能去掉看看效果嘛?! * * * * * (9)设置退出按钮事件 ![](https://box.kancloud.cn/be5c835e0ff76c33b4b4ebe2b788d0aa_169x74.png) 直接关闭屏幕,退出程序。