[知了堂学习笔记]_纯JS制作《飞机大战》游戏_第2讲(对象的实现及全局变量的定义)

整体展示:

一、全局变量

/*===================玩家参数==========================*/
var myPlane;  //英雄对象
var leftbtn = false;  //左移动标志
var rightbtn = false; //右移动标志
var topbtn = false; //上移动标志
var bottombtn = false; //下移动标志
var shot = false;  //射击标志
//var bulletStatus = false; //子弹
var score = 0; //得分
var killNum = 0; //杀敌数
var shotboom = false; //必杀标志
var pass = 1;//关卡
var mainobj = document.getElementById("main");  //获取游戏div元素
/*===================集合==========================*/
var bulletList = new Array();  //英雄子弹集合
var boomList = new Array();    //必杀集合  
var boosList = new Array();    //boos集合
var enemyList = new Array();    //敌机集合
var boosBullet = new Array();    //boos子弹集合
var toolList = new Array();    //道具集合
/*====================计时器=========================*/
var ctrlmove;  //英雄移动计时器
var ctrlshot;    //英雄射击计时器
var bulletfly;    //子弹移动计时器
var createenemy;    //敌机生成计时器
var enemymove;    //敌机移动计时器
var hitplane;    //击中判断计时器
var exist;    //判断对象存在与否计时器

 

 

二、飞机对象

/**
 * 飞机对象
 * @param {Object} src  飞机图片路径
 * @param {Object} x    x坐标
 * @param {Object} y    y坐标
 * @param {Object} speed    飞机移动速度
 * @param {Object} blood    飞机血量
 */
function createPlane(src, x, y, speed, blood) {
    this.planeNode = document.createElement("img");    //飞机图片节点,用于主界面中显示
    this.src = src;
    this.x = x;
    this.y = y;
    this.speed = speed;
    this.blood = blood;
    this.level = 1;    //等级
    this.boom = 5;    //必杀数量
    //飞机左移动,需要判断是否飞出主界面左侧,如果移出,则从右边出现
    this.leftMove = function() {
        if (this.planeNode.style.left == "-60px")
            this.planeNode.style.left = "440px";
        else {
            this.planeNode.style.left=parseInt(this.planeNode.style.left) - this.speed +"px";
        }
    };
    //飞机右移动,需要判断是否飞出界面,飞出则从左边出现
    this.rightMove = function() {
        if (this.planeNode.style.left == "440px"){
            this.planeNode.style.left = "-60px";
        }
        else {
            this.planeNode.style.left=parseInt(this.planeNode.style.left) + this.speed +"px";
        }
    };
    //飞机上移动,当移动到一定值时则不能移动
    this.topMove = function() {
        if (this.planeNode.style.top == "-10px"){
            
        }
        else {
            this.planeNode.style.top=parseInt(this.planeNode.style.top) - this.speed +"px";
        }
    };
    //飞机下移动,当移动到一定值时,则不能移动
    this.botoomMove = function() {
        if (this.planeNode.style.top == "600px"){
            
        }
        else {
            this.planeNode.style.top=parseInt(this.planeNode.style.top) + this.speed +"px";
        }
    };
    
    //在页面上创建飞机,设置css属性
    this.create = function() {
        this.planeNode.src = this.src;
        this.planeNode.style.position = "absolute";
        this.planeNode.style.left = this.x + "px";
        this.planeNode.style.top = this.y + "px";
        this.planeNode.style.zIndex = 6;
        mainobj.appendChild(this.planeNode);//在游戏界面中添加飞机节点并显示
    };
    //发射子弹
    this.shot = function(){
        var bullet1 = new createBullet("img/img_bullet.png",parseInt(this.planeNode.style.left),parseInt(this.planeNode.style.top),this.speed);
        bulletList.push(bullet1);
        var bullet2 = new createBullet("img/img_bullet.png",parseInt(this.planeNode.style.left)+50,parseInt(this.planeNode.style.top),this.speed);
        bulletList.push(bullet2);
    }
    //释放必杀
    this.shotBoom=function(){
        if(this.boom>0){
            var boom1 = new createBullet("img/daodan1.png",parseInt(this.planeNode.style.left)+20,parseInt(this.planeNode.style.top),this.speed);
            boomList.push(boom1);
            this.boom--;
        }
    }
    
    this.create();
}

三、敌机对象

/**
 * 敌人飞机对象
 * @param {Object} src
 * @param {Object} x
 * @param {Object} y
 * @param {Object} speed
 * @param {Object} blood
 */
function createEnemyPlane(src,x,y,speed,blood){
    this.src = src;
    this.x = x;
    this.y = y;
    this.blood = blood;
    this.speed = speed;
    this.isdead = false;    //是否死亡
    this.deadtime = 10;        //移除时间(计时器时间*10),用于爆炸效果
    this.enemyNode = document.createElement("img");
    
    this.create = function(){
        this.enemyNode.src = this.src;
        this.enemyNode.style.position = "absolute";
        this.enemyNode.style.left = this.x +"px";
        this.enemyNode.style.top = this.y+"px";
        this.enemyNode.style.zIndex = 6;
        mainobj.appendChild(this.enemyNode);
    };
    
    this.move = function(){
        this.enemyNode.style.top=parseInt(this.enemyNode.style.top) + this.speed +"px";
    };
    
    this.rightMove=function(){
        this.enemyNode.style.left=parseInt(this.enemyNode.style.left) + this.speed +"px";
    };
    
    this.leftMove=function(){
        this.enemyNode.style.left=parseInt(this.enemyNode.style.left) - this.speed +"px";
    };
    
    this.shot=function(){
        
    };
    /**
     * boos射击
     * 很据英雄的level不同,boos的子弹不同
     */
    this.boosShot=function(){
        if(myPlane.level==1){
            var bullet = new createBullet("img/wp2.png",parseInt(this.enemyNode.style.left)+22,parseInt(this.enemyNode.style.top),this.speed);
            boosBullet.push(bullet);
        }
        if(myPlane.level==3){
            var bullet = new createBullet("img/wp3.png",parseInt(this.enemyNode.style.left)+26,parseInt(this.enemyNode.style.top),this.speed);
            boosBullet.push(bullet);
        }
    };
    this.create();
    
}

四、子弹对象

/**
 * 子弹对象
 * @param {Object} src
 * @param {Object} x
 * @param {Object} y
 * @param {Object} speed
 */
function createBullet(src,x,y,speed){
        this.src = src;
        this.x = x;
        this.y = y;
        this.speed = speed;
        this.ishit = false;        //子弹是否击中
        this.boomStop = 50;        //必杀移动时间
        this.boomTime = 100;    //必杀移除时间
        this.bulletNode = document.createElement("img");
        
        this.create = function(){
            this.bulletNode.src = src;
            this.bulletNode.style.position = "absolute";
            this.bulletNode.style.left = this.x+"px"; 
            this.bulletNode.style.top = this.y + "px";
            this.bulletNode.style.zIndex = 6;
            mainobj.appendChild(this.bulletNode);
        };
        
        this.move = function(){
            this.bulletNode.style.top = parseInt(this.bulletNode.style.top)-this.speed +"px";
        };
        
        this.downMove=function(){
            this.bulletNode.style.top = parseInt(this.bulletNode.style.top)+this.speed +"px";
        }
        this.create();
    }

五、道具对象

function createTool(src,x,y,speed,tooltype){
    this.src = src;
    this.x = x;
    this.y = y;
    this.speed = speed;
    this.getme = false;
    this.tooltype = tooltype;//道具类型 1为加boom  2为加血,
    this.toolNode = document.createElement("img");
    
    this.create=function(){
        this.toolNode.src=this.src;
        this.toolNode.style.top=this.y+"px";
        this.toolNode.style.left=this.x+"px";
        this.toolNode.style.position="absolute";
        this.toolNode.style.zIndex=6;
        mainobj.appendChild(this.toolNode);
    }
    
    this.move=function(){
        this.toolNode.style.top=parseInt(this.toolNode.style.top) + this.speed +"px";
    }
    this.create();
}

    其实在这些对象中,很多代码都是类似的,只要能实现一个对象,在仔细想一想其他对象的特性,结合下代码很快能实现。

 下一讲,则会实现各种处理方法了,让游戏活起来。

 以上为今天的第一讲,如需了解更加深入的知识,请大家进入知了堂社区:http://www.zhiliaotang.com/portal.php

posted on 2017-08-22 19:26  trm  阅读(304)  评论(0编辑  收藏  举报

导航