*javascript面向对象编程(精灵大战)

(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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值