(1)ECMA脚本语言绑定:https://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html
ECMA是"European Computer Manufactures Association"的缩写,中文称欧洲计算机制造联合会。是1961年成立的旨在建立统一的电脑操作格式标准–包括程序语言和输入输出的组织。
//this是Javascript语言的一个关键字。它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。
//随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用本函数的那个对象。
//.prototype 属性使您有能力向对象添加属性和方法。
//.push(element…) 方法可向数组的末尾添加一个或多个元素,并返回新的长度。
//.appendChild(DOM对象)
//.removeChild(DOM对象)
//.setInterval(function(){}); //创建定时器
//clearInterval(a.timer) //清除掉a的定时器timer
//.parentNode标签父结点
//Math.random()方法可返回介于 0 ~ 1 之间的一个随机数。
//parseInt(实数)方法返回一个整型数字
//setTimeout(function(){}); //只执行一次里面的代码
//.innerHTML = “得分:” + score ; //设置标签对象的内容
//类方法EnemyMonster.timer与类对象方法this.timer是不一样的。
效果图如下
创建公共变量
var score = 0 ; //得分
var song ; //游戏背景音乐
var bgTimer ; //背景移动定时器
扩展了javascript的内置对象Array
Array.prototype.remove=function(element){
for(i=0;i<this.length;i++){//遍历数组对象的元素
if(this[i]==element){ //当相等时
//调用javascript的内置方法splice(规定要删除的项目的位置,要删除的项目数量),返回删除后的this
this.splice(i,1);
}
}
return this; //返回调用remove方法的对象
}
自定义(射手-射箭)类 MyShooter的构造函数function MyShooter(x,y,container){}
function MyShooter(x,y,container){
this.arrows = []; //自定义一个弓箭集合
this.x = x; //射手的坐标初始化
this.y = y;
this.container = container; //引入游戏面板
this.init();
}
扩展init()方法
MyShooter.prototype={
init : function(){
this.Shooter();
this.ShooterMove();
var that = this ; //此处的this指的是MyShooter
MyShooter.timer = setInterval(function(){ //为MyShooter对象定义一个弓箭发射定时器 //此处的this指的是timer
that.Arrow(); //每隔0.4秒执行一次
},400);
},
//自定义射手对象
Shooter : function(){
this.shooter = document.createElement("img"); //创建一个img标签
this.shooter.src = "images/shooter.gif" ; //设置src
this.shooter.style.cssText = "position:absolute; left:" + this.x + "px; top:" + this.y + "px;"; //设置坐标
this.container.appendChild(this.shooter); //添加到游戏面板中
},
//射手随鼠标移动事件
ShooterMove : function(){
var that = this; //此处的this指的是MyShooter对象,其DOM父结点为container
//鼠标监听器
this.container.mousemove = function(e){ //此处的this指的是container,其DOM父结点为body
//在此处的that和this代表的对象不同
e = e||event;
//根据鼠标的坐标确定射手的坐标
var sx = e.clientX - this.offsetLeft - that.shooter.offsetWidth/2 ;
var sy = e.clientY - this.offsetTop -that.shooter.offsetHeight/2 ;
that.shooter.style.left = sx + "px" ;
that.shooter.style.top = sy + "px" ;
//如果射手走出游戏面板的右边界限
if(that.shooter.offsetLeft + that.shooter.offsetWidth >= this.offsetWidth){
that.shooter.style.left = this.offsetWidth - that.shooter.offsetWidth +"px" ;
}
//左边界限
if(that.shooter.offsetLeft <= 0){
that.shooter.style.left = "0px" ;
}
//顶边界限
if(that.shooter.offsetTop <= 0){
that.shooter.style.top = "0px" ;
}
//底边界限
if(that.shooter.offsetT