JavaScript 小型打飞机游戏实现原理说明


Posted in Javascript onOctober 28, 2010

玩法说明:上下左右控制移动,空格发弹。 每打中一个敌机就加100分,每提升5000分,玩家的飞机的一次发弹数就加一,最多四,被敌机撞到或者让敌机飞到底部就算输。。。。

演示代码:http://demo.3water.com/js/FlyBeat/index.html

游戏目前的功能还是比较简单的。。。。貌似就贴个源码不太好,所以这次还是写写思路。。。

游戏主要分为4个js文件,4个js文件分别包含4个类。
1:飞机类---Flyer

//飞机对应的dom元素 
this.dom = null; 
//是否活着 
this.isLive = true; 
//是否移动中 
this.isMove = false; 
//移动的ID 
this.moveId = null; 
//是否发弹中 
this.isSend = false; 
//目前已经发了多少颗弹(存在屏幕显示) 
this.nowBullet = 0; 
//游戏背景Dom 
gamePanel : null, 
//游戏背景宽度 
gameWidth : 0, 
//游戏背景高度 
gameHeight : 0, 
//飞机移动速度 
movepx : 10, 
//飞机移动频率 
movesp : 30, 
//飞机子弹级别 
bulletLevel : 1, 
//最大发弹数(存在屏幕显示) 
maxBullet : 12, 
//方向键值对应 
keyCodeAndDirection : { 
37 : "left", 
38 : "up", 
39 : "right", 
40 : "down" 
},

以上是飞机应该有的属性。。。。

飞机除了有固定的一些属性之外,其实还应该有血量这些的,但这个是简陋版嘛,你可以自己添加。

更应该会有移动,发射子弹,爆炸等方法。

移动: 其实就是捕获键盘事件,如果是简单的按下键盘的左,然后飞机就向左移动几个像素,你会发觉,飞机移动起来很生硬,或者说是操作延迟,特别是你想按住键盘左的时候,它移动的时候,延迟得很严重,操作不流畅。所以一般都是:当你按下键盘时,调用一个setInterval函数来让飞机不断的移动,当释放键盘的时候,移动停止,这样移动就很流畅了。

发射子弹: 其实就是用户按了空格,然后触发一个键盘事件,此事件就是生成一个子弹Bullet类的对象,然后让它飞出去。此类后面会有说到。

爆炸: 当飞机撞到敌机的时候,飞机就会触发一个爆炸事件,结束游戏。当然,这个检测飞机是否撞到敌机,是在敌机那里检测。

这些是一些基本事件。还有扩展的事件。。可以自己添加

 2:子弹类--Bullet

//子弹Dom元素 
this.dom = null; 
//子弹移动速度 
movepx : 8, 
//子弹移动频率 
movesp : 10,

子弹最基本的两个方法:移动检测是否打中敌机

移动:子弹的移动简单很多,就一直往上跑,top一直减就OK了。 

检测是否打中敌机:将敌机的列表传进方法中,遍历敌机,检测子弹与敌机是否有碰撞,有则敌机爆炸,没有则跳过。
3:敌机类--Enemy

//敌机dom元素 
this.dom = null; 
//是否 
this.isLive = true; 
//敌机横向移动速度 
movepx : 6, 
//敌机纵向移动速度 
movepy : 4, 
//敌机移动频率 
movesp : 75,

敌机的基本方法有:移动,是否撞到飞机Flyer玩家,爆炸

移动:就是敌机如何移动,我是设置成敌机从上到下飞,让后从左往又飞,撞到右边尽头,调头飞。

是否撞到飞机Flyer玩家:在敌机不断的移动过程中,不断的检测飞机Flyer与敌机是否有交集,有则两者爆炸,游戏结束,否则跳过。

 爆炸:就是敌机被子弹打中或者撞到飞机Flyer时触发的事件。

4:游戏控制类--Game

其中包含一个扩展方法:从数组中删除指定元素

//扩展数组方法,删除特定的值 
Array.prototype.remove = function(obj){ for(var i=0,l=this.length;i < l;i++){ 
if(this[i] == obj){ 
this.splice(i,1); 
return this; 
} 
} 
throw "The Array has no this Obj"; 
}

其余的,都是些初始化敌机,飞机以及控制游戏流程的,还有一些修改分数,游戏结束之类的方法。这些没啥好讲。

大致就这样,游戏本身比较简单,下面的源码都有注释,这次写得比较详细。。。有兴趣的朋友,可以自己继续完善。。。有啥问题,欢迎拍砖。。。多多指教。
打包下载地址 https://3water.com/jiaoben/32660.html

Javascript 相关文章推荐
初窥JQuery-Jquery简介 入门了解篇
Nov 25 Javascript
Javascript字符串对象的常用方法简明版
Jun 26 Javascript
avalonjs实现仿微博的图片拖动特效
May 06 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
Jul 28 Javascript
JavaScript基础——使用Canvas绘图
Nov 02 Javascript
基于JavaScript实现本地图片预览
Feb 08 Javascript
javascript内存分配原理实例分析
Apr 10 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
Aug 04 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
Nov 08 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
Nov 04 Javascript
es6中new.target的作用和使用场景简单示例分析
Mar 14 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
Apr 06 Javascript
基于jquery的网页SELECT下拉框美化代码
Oct 28 #Javascript
jQuery编写widget的一些技巧分享
Oct 28 #Javascript
jQuery timers计时器简单应用说明
Oct 28 #Javascript
jquery ajax abort()的使用方法
Oct 28 #Javascript
BOM与DOM的区别分析
Oct 26 #Javascript
js下判断 iframe 是否加载完成的完美方法
Oct 26 #Javascript
Javascript下判断是否为闰年的Datetime包
Oct 26 #Javascript
You might like
慎用preg_replace危险的/e修饰符(一句话后门常用)
2013/06/19 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
PHP简单读取xml文件的方法示例
2017/04/20 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
浅析tr的隐藏和显示问题
2014/03/05 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
2016/09/19 Javascript
jQuery实现火车票买票城市选择切换功能
2017/09/15 jQuery
微信小程序之蓝牙的链接
2017/09/26 Javascript
解决JQuery全选/反选第二次失效的问题
2017/10/11 jQuery
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
解决微信浏览器缓存站点入口文件(IIS部署Vue项目)
2019/06/17 Javascript
浅谈vue-router路由切换 组件重用挖下的坑
2019/11/01 Javascript
vue 遮罩层阻止默认滚动事件操作
2020/07/28 Javascript
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
python实现apahce网站日志分析示例
2014/04/02 Python
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
python使用代理ip访问网站的实例
2018/05/07 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
python实现的config文件读写功能示例
2019/09/24 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
python爬虫容易学吗
2020/06/02 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
小学岗位竞聘方案
2014/01/22 职场文书
初一科学教学反思
2014/01/27 职场文书
保安岗位职责
2014/02/21 职场文书
Android中View.post和Handler.post的关系
2022/06/05 Java/Android