/*
创建子弹:因为子弹不是只创建一个所以要用构造函数 注意一点:子弹发射的位置应该是英雄机的正中央的位置,所以需要传点东西进来
*/
function Bullet(l,t){
this.l = l;//保留一下传进来的l
this.t = t;//保留一下创进来的t
//初始图片
this.self = null;
//子弹初始left
this.left = 0;
//子弹初始top
this.top = 0;
//子弹的速度
this.speed = 2;
//子弹编号 因为在引擎里面有一个专门存放子弹的对象,所以我们要给每一个子弹生成编号
this.id = '';
}
Bullet.prototype = {
constructor:Bullet,
init:function(){
//创建一个元素
var img = document.createElement('img');
//将图片路径赋值给它
img.src='image/bullet1.png';
//插入到game中
Engine.game.appendChild(img);
//赋值给子弹的初始图片
this.self = img; //当图片加载完成以后获取图片的高度和宽度
var _this = this;//在函数里面this的指向会改变,所以我们提前报存下来
img.onload = function(){
//因为上面的属性有this.left所以我们应该和图片一样赋值给它
_this.left = _this.l-_this.self.offsetWidth/2;
_this.top = _this.t-_this.self.offsetHeight;
img.style.left = _this.left+'px';
img.style.top = _this.top+'px';
}; //生成子弹编号并放入引擎的bullet中
this.id = Math.random();
Engine.bullet[this.id]=this;
},
//子弹移动,定时器都交给引擎去做
move:function(){
this.top-=2;
this.self.style.top = this.top+'px';
//越界判断
if(this.top<=-this.self.offsetHeight){
this.destroy();
}
},
destroy:function(){
//销毁
} }

英雄机更新的部分

/*
英雄机:因为英雄机只有一辆所以不需要用构造函数
*/
var Hero = {
//初始图片
self:null,
//初始left
left:0,
//初始top
top:0,
//生命值
life:3,
//加载进来的图和爆照的图
imgs:['image/hero.gif','image/hero-bang.gif'],
//初始化
init:function(){
//创建一个元素
var img = document.createElement('img');
//将图片路径赋值给它
img.src=this.imgs[0];
//插入到game中
Engine.game.appendChild(img);
//赋值给英雄机的初始图片
this.self = img;
//当图片加载完成以后获取图片的高度和宽度
var _this = this;//在函数里面this的指向会改变,所以我们提前报存下来
img.onload = function(){
//因为上面的属性有this.left所以我们应该和图片一样赋值给它
_this.left = (Engine.game.offsetWidth-img.offsetWidth)/2;//英雄机的left中心点等于(game的宽度-英雄机的宽度)除以2
_this.top = Engine.game.offsetHeight-img.offsetHeight;
img.style.left = _this.left+'px';
img.style.top = _this.top+'px';
//初始化的时候调用move
_this.move();
_this.shoot();
}; },
//鼠标移动的时候英雄机也要移动
move:function(){
//类似于放大镜
var _this = this;
document.onmousemove = function(e){
var e = e||event;
var l = e.clientX - Engine.game.offsetLeft - _this.self.offsetWidth/2;
var t = e.clientY - Engine.game.offsetTop - _this.self.offsetHeight/2;
//边界处理
var lmax = Engine.game.offsetWidth-_this.self.offsetWidth;//最大边界 var bmax = Engine.game.offsetHeight-_this.self.offsetHeight;//最大边界
l = l < 0 ? 0 : (l > lmax ? lmax : l);
t = t < 0 ? 0 : (t > bmax ? bmax : t); //赋值
_this.self.style.left = l+'px';
_this.self.style.top = t+'px'; //更新left top
_this.left = l;
_this.top = t;
}
},
//发子弹
shoot:function(){
//每隔100毫秒发一次子弹
var _this = this;
var timer = setInterval(function(){
var l = _this.left+_this.self.offsetWidth/2
new Bullet(l,_this.top).init();
},100)
}
}
//在游戏没有开始的时候不能出现英雄机和子弹所以不能再这里面调用他的初始方法,要在引擎里面调用
//Hero.init();

英雄机更新部分

1、更新了发射子弹

2、在英雄机加载进来的时候移动和发射子弹

//发子弹
shoot:function(){
//每隔100毫秒发一次子弹
var _this = this;
var timer = setInterval(function(){
var l = _this.left+_this.self.offsetWidth/2
new Bullet(l,_this.top).init();
},100
)
}
img.onload = function(){
//因为上面的属性有this.left所以我们应该和图片一样赋值给它
_this.left = (Engine.game.offsetWidth-img.offsetWidth)/2;//英雄机的left中心点等于(game的宽度-英雄机的宽度)除以2
_this.top = Engine.game.offsetHeight-img.offsetHeight;
img.style.left = _this.left+'px';
img.style.top = _this.top+'px';
//初始化的时候调用move
_this.move();
_this.shoot();

};

引擎更新

/*
游戏引擎
*/
var Engine = {
//刚开始的游戏状态
gameStatus:false,
//所以敌机
enemy:{},
//子弹
bullet:{},
//得分
score:0,
//背景图片
game:document.querySelector('.game'),
//初始化
init:function(){
this.gameStart();
},
//游戏开始
gameStart:function(){
var _this = this;
//点击图片的时候判断游戏状态
this.game.onclick = function(){
if(!_this.gameStatus){
_this.gameStatus = true;
//移动移动
_this.bgMove();
_this.handleMove();
         _this.createPlane();
}
}
},
//背景移动
bgMove:function(){
var y=0;
var _this = this;
this.bgTimer = setInterval(function(){
y+=2;
_this.game.style['background-position-y']=y+'px';
},50)
},
  createPlane:function(){
    //创建敌机和英雄机
    Hear.init();
  },
//所有敌机和子弹都要动
handleMove:function(){
var _this=this;
var timer = setInterval(function(){
for(var i in _this.bullet){
_this.bullet[i].move()
}
},30)
}
};
Engine.init();

引擎更新部分

//所有敌机和子弹都要动
handleMove:function(){
var _this=this;
var timer = setInterval(function(){
for(var i in _this.bullet){
_this.bullet[i].move()
}
},30)
}
//游戏开始
gameStart:function(){
var _this = this;
//点击图片的时候判断游戏状态
this.game.onclick = function(){
if(!_this.gameStatus){
_this.gameStatus = true;
//移动移动
_this.bgMove();
_this.handleMove();

}
}
},

最新文章

  1. LINQ系列:Linq to Object排序操作符
  2. 【转】What is an SDET? Part 2 – Skill Matrix of SDET
  3. Linux系统启动级别及顺序
  4. tomcat虚拟目录映射网络共享目录
  5. [front]有效开展一个前端项目
  6. 农资产品送货车上使用 PDA手持机 现场销售开单 然后开单后能直接通过移动网络传回电脑(云服务器)
  7. 伪多项式时间算法Pseudo-polynomial Algorithms-----geeksforGeek 翻译
  8. SQL Server2008 错误源:.net SqlClient data provider的解决方法
  9. 让ie6也支持max-width,和max-height实现图片等比例缩放
  10. Android异步下载网络图片
  11. mapkit定位以及俯视视图
  12. ESFramework 4.0 进阶(04)-- 驱动力:通信引擎(下)
  13. django中request相关用法
  14. Echars使用
  15. rownum查询前N条记录
  16. Chrome 浏览器数据无法同步,google账号登录失败,提示 Request canceled
  17. SpringBoot使用AOP
  18. SpringMVC登录拦截DEMO
  19. Stealth潜行风格游戏源码(Unity5x)
  20. Head First Servlets &amp; JSP 学习笔记 第四章 —— 作为Servlet

热门文章

  1. 使用特殊构造的5GB文件测试Win2012Dedup功能
  2. 关于Cocos2d-x手机上运行游戏的时候屏幕横屏改竖屏的解决方案
  3. 关于Cocos2d-x中监听物体不超越边界的解决方案
  4. sdi 采集卡---环视频拼接直播方案
  5. par函数的xaxt函数-控制x轴刻度的显示
  6. c++ vector init操作
  7. 做游戏长知识------基于行为树与状态机的游戏AI(一)
  8. C++学习地址
  9. Unity教程之-基于行为树与状态机的游戏AI
  10. opencv移植到ubuntu