对于没有接触过html的朋友,要实现一个最简单的html5打地鼠游戏,也是不知道从何下手的。就算是html高手,没有上千行代码,也完不成一个像样的打地鼠游戏。

网上找到一个开源的打地鼠游戏(参见下载地址),粗略看了一下代码,代码行数1000+。

今天我要介绍的打地鼠游戏,主要逻辑代码,也就60多行,所有的代码加起来也就100多行,是为某客户定制的一款比较完整的商业游戏,大部分的功能也就只是一下午的时间就能完成。

先看一下实际的成果:
PC点击这里玩
手机下方扫描二维码玩

如果你想在本游戏上进行改进,点击这里。

开始讲解之前,打个广告,欢迎html5游戏开发爱好者扫描下方二维码或者搜群号223466431,加入开发者QQ群,我们免费提供最快速的开发工具,我们的所有html5游戏都开源。

整个游戏的开发,基于在线H5游戏开发工具TangIDE,相关开发文档点击这里,开发视频正在制作中…如果您致力于开发H5轻应用,请点这里

1. 准备工作

浏览器打开TangIDE链接,右上角有登陆按钮,选择QQ登陆。
浏览器推荐谷歌浏览器或者猎豹浏览器。

2. 创建第一个场景

打开工具后,就有个默认场景,这个场景可以作为我们的第一个场景,把里面的足球和和草地删掉,场景改名为win-loading,然后更改背景为”加载背景.jpg”。图片资源在公共资源目录下面:

拖一个音乐控件进来,清除默认背景音乐,选择资源菜单下的”背景音乐.mp3”作为背景音乐,勾选”自动播放”和”循环”两个选项,在通用标签里不勾选”运行时可见选项”。

全部做好之后,成果如下

3. 创建第二个场景

新建一个场景,将场景名字改为win-start。
拖一个图片进来,设置图片为”标题1.png”,放在场景的顶部,按照下图设置位置和大小属性:

其他几个图片控件类似。

拖两个文本控件进来,表示分数和时间。

这里重点要讲的一个元素是雪花,拖一个图片控件进来,将图片设置为”雪花.png”,这里需要拆分图片,方法是长按图片会弹出菜单,选择”拆分图像”后,填入行列数即可


再次选择时就可以选里面的小图了。

选择完图片之后,要用到动画编辑器了(选中控件,菜单栏有个小人图标就是)。

创建一个动画rotate,设置如下图

这个时候点击预览就雪花就可以一直转了。

再拖两个按钮进来,分别放置”开始按钮1.png”,”开始按钮t2.png”。

最后拖一个帧动画进来,在特有属性里面,选择”黑色素.png”作为帧动画元素,按上述方法拆分图片,选择第0,1张图片,帧率设置为3。

全部完成后,如下图:

4. 创建第三个场景

新建一个场景,改名为win-game,其他的控件如第二个场景一样放置。
然后,最终要的控件是地鼠(即黑色素)的实现:
首先拖一个图片控件进来,将背景图片清空。
再拖一个帧动画到图片上,作为这个图片控件的子控件。
用动画编辑器为帧动画设置三个动画,如下图所示:



为帧动画选择图片,在特有属性里面,拆分”黑色素.png”,然后设置2个分组,如下图:


然后选择帧动画的父控件,复制7个,摆放到合适的位置,调整一下旋转角度,使其看起来更美观一些。

再拖一个帧动画,作为点滴效果,选择”精华液.png”作为帧动画图片,图片拆分和分组如上不再赘述。

最后拖一个时钟控件用来做倒计时用,特有属性的时长设置为1000。
全部完成之后,如下图:

5. 编写一点代码

其他的游戏场景不再赘述,读者可自行编辑和参考,到现在为止,游戏的准备工作都已经做完了,我们还没写一行代码,但是点击预览,就已经能看到大部分效果了,只是不能响应事件而已。
现在该写一些代码了,其实很多代码还可以自动生成的。
首先场景的切换,比如第一个场景切换到第二个场景的代码就可以自动生成,选中场景,编辑onClick事件。

点击生成代码即可。

同样第二个场景切换到第三个场景也可以依葫芦画瓢。

现在重点讲第三个场景的实现。
选中黑色素帧动画的父控件,编辑器onUpdateTransform事件,添加如下代码:

canvas.beginPath();
canvas.arc(this.w >> 1, this.h >> 1, this.w >> 1, 0, 2 * Math.PI);
canvas.clip();

这三行代码,实现的是黑色素(也就是地鼠)的隐藏和显示。

在第三个场景的onBeforeOpen中,添加如下代码:

var win = this.getWindow();
var STATE_IN = 0;
var STATE_OUT = 2;
var STATE_FREE = 3;
var STATE_ATTACKED = 4;
win.attacked = 0;
win.total = 0;
win.times = 30;
win.gameOver = false;
var dropper = win.find("dropper");
win.find("ui-icon-general-1").setVisible(true);
var resetState = function() {if(win.gameOver || !this.children) {return;}var self = this;var element = self.children[0];win.total++;element.opacity = 1;element.x = 200;element.y = 200;element.play("normal");self.gameState = STATE_IN;element.animate("display", function() {self.gameState = STATE_FREE;setTimeout(function() {if(self.gameState === STATE_FREE) {self.gameState = STATE_OUT;element.animate("dismiss");}setTimeout(function() {if(self) {self.resetState();}}, 1200 + 800 * Math.random());}, 1500);});
};
var handleClick = function(point) {var self = this;if(self.gameState === STATE_FREE) {win.attacked++;win.find("ui-attacked").setText(win.attacked + "ko");dropper.animate({xStart:dropper.x, xEnd:self.x + 50, duration:400}, function() {dropper.play("drop", 1, function() {dropper.play("normal", 1);});});self.gameState = STATE_ATTACKED;var element = this.children[0];element.play("attacked", 1, function() {element.animate("disappear", function() {});});}
};
for(var i = 1; i <= 7; i++) {var melanin = win.find("ui-sprite-general-" + i);melanin.resetState = resetState;melanin.handleClick = handleClick;var ele = melanin.children[0];ele.setPosition(200, 200);
}var index = 1;
function launch() {var melanin = win.find("ui-sprite-general-" + index);melanin.resetState();if(index < 7) {index++;setTimeout(launch, 1500 * Math.random());}
}
launch();

时钟控件的onTimeout事件下添加如下代码:

var win = this.getWindow();
if(win.gameOver) {return;
}
win.times--;
win.find("ui-times").setText(win.times + "s''");
if(win.times <= 0) {win.gameOver = true;var initData = {};initData.total = win.total;initData.attacked = win.attacked;this.openWindow("win-result", function (retData) {console.log("window closed.");}, false, initData);
}

TIPS:
如果你想看全部的代码,可以选择工具->代码查看器

如果你看完觉得手痒,想在我的基础上继续改进,点击这里。
如果有疑问或者指教,欢迎加群223466431讨论,谢谢!

TangIDE游戏开发之70行代码实现打地鼠相关推荐

  1. ios html清除缓存,iOS开发之1行代码实现缓存计算及清除缓存

    话不多说,直接撸代码 // // gzhCache.h // cache // // Created by 郭志贺 on 2020/5/27. // Copyright © 2020 郭志贺. All ...

  2. DirectX游戏开发之2D文字的实现

    DirectX游戏开发之2D文字的实现 文字是承载信息最有效的载体之一,各种游戏程序都离不开文字的显示.对于3D文字来说,2D文字有其渲染的高效性和实现的简洁性. 2D文字的显示无论在写2D游戏还是在 ...

  3. DirectX游戏开发之3D角色动起(下)

    DirectX游戏开发之3D角色动起(下) 直接先上图吧! 动作idle 动作attack 动作walk 动作run 看,多动作的模型搞下来了.原则上只要在此基础上略做修改就可以实现3d游戏的基本制作 ...

  4. 爬取微信文章,用70行代码爬取了搜狗上666篇文章

    因为再看崔庆才的教程,刚好看到爬取微信文章,所以就想着自己试试.打开搜狗发现,搜狗的微信文章页面网页布局有了变化(准确来说是简单了一点). 所以分析了一下,用了70行代码实现了爬取上面['搞笑', ' ...

  5. [整理]Unity3D游戏开发之Lua

    原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...

  6. 微信小游戏开发之CocosCreator多分辨率场景适配方案

    主题 Cocos Creator不同手机分辨率的背景图像和场景内容适配 特别说明 CocosCreator微信小游戏开发系列文章,是我在逐步开发过程中,基于官方文档之上,记录一些重点内容,以及对官方文 ...

  7. libGDX游戏开发之Box2D(十四)

    libGDX游戏开发之Box2D(十四) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和goo ...

  8. JAVA游戏开发之FPS精准控制

    目录 JAVA游戏开发之FPS精准控制... 1 1       概述... 2 1.1        编写目的... 3 2       FPS精准控制... 3 2.1        FPS描述. ...

  9. 用70行代码实现日志分析程序​

    python又一力作,感受python的强大.用70行代码实现日志分析程序 功能介绍:可直接对文本日至进行分组和排序功能,完了输出结果粘贴到excel里就可以直接生成图表,对于排查一些生产环境问题有很 ...

  10. 开发中的“软”与“硬”:高画质移动游戏开发之道

    摘要:游戏的效果不仅与游戏引擎的渲染相关,与硬件优化也有千丝万缕的联系.一款基于芯片优化的移动游戏界面,甚至可以堪比视频游戏的视觉效果.高通半导体事业部资深经理刘晓光从软硬件两个层面分享了移动游戏开发 ...

最新文章

  1. 如何建立图像数据矩阵和图像显示灰度之间的关系!_放射技术考试第四章第一节 数字图像的特征...
  2. 分享关于搭建高性能WEB服务器的一篇文章
  3. UA MATH571B 试验设计VI 随机效应与混合效应1
  4. pwntools所带的函数使用方法
  5. stl中map函数_map :: empty()函数以及C ++ STL中的Example
  6. 【LightOJ - 1031】Easy Game (区间dp,博弈)
  7. XML文件的写入和读取(解析)基于DOM4J工具
  8. 使用foreach循环遍历集合元素
  9. docker 安装最新mysql
  10. 系统学习深度学习(二) --自编码器,DA算法,SDA,稀疏自编码器
  11. activiti 动态加载任务执行人(基于jeesit)
  12. docker mysql redis 镜像详解
  13. zookeeper-选举流程
  14. Android各版本对应Android API(知识累积)
  15. 将mac打造成和linux差不多的c语言开发环境,完全新手版
  16. 【日常记录】win10打印机打印不出来,打印队列里有文档无法删除
  17. 查看文章 mysql:表注释和字段注释
  18. filter指定过滤不起作用
  19. [Python从零到壹] 三十九.图像处理基础篇之图像几何变换(镜像仿射透视)
  20. java毕业设计家庭理财记账系统(附源码、数据库)

热门文章

  1. 计算机专业保研面试备考:数据库系统理论
  2. 计算机中图形和图像这两个概念的异同,图形图象处理
  3. oracle12c 日志分析,【案例】Oracle 12C日志大量Resize operation completed for file信息
  4. 《沉默的大多数》 - 王小波
  5. QQ空间说说一键批量删除软件2.0使用教程
  6. chromium代码结构
  7. 计算机高级语言程序的流程控制结构,汇编语言(四) - 程序结构
  8. PDF转图片怎样转换?有哪些好用PDF转换的方法?
  9. 阿尔伯塔计算机科学学费,留学360发布阿尔伯塔大学学费
  10. Python3 实现网易126邮件发送