js炫酷飞机大战

素材

方法及思路


1、构造函数方式创建敌方飞机,定义移动函数(每次top值为上次top值加速度)
2、计时器固定时间调用构造函数,构造函数传入的值用随机数传入,构造的新敌方飞机加入敌方飞机数组
3、通过循环遍历所有敌方飞机,如果top值大于650,删除子节点,删除对应敌方飞机
4、背景图动画,用计数器改变背景图定位实现动画效果(判定如果位置等于840时,重新从0开始)

5、创建我方飞机,当鼠标移动时将坐标赋值给我方飞机(注意边界判定,飞机不要除动画外)

6、判定游戏结束,敌方飞机X坐标>=我方飞机X坐标&&敌方飞机X坐标<=我方飞机坐标+我方飞机宽度&&敌方飞机Y坐标>=我方飞机Y坐标&&敌方飞机Y坐标<=我方飞机Y坐标+我方飞机宽度(这4个条件必须都满足才碰撞)
7、构造函数创建子弹,并加入到子弹数组里,定义属性,定位应定位于我方飞机正前方,定义移动函数(每次top值为上次top值-速度值)
8、计时器创建子弹速度,移动时创建子弹,判定如果子弹top值小于-650,删除子弹节点及对应子弹数组
9、写碰撞函数子弹X坐标>=敌方飞机X坐标&&子弹X坐标<=敌方飞机X坐标+敌方飞机宽度&&子弹Y坐标>=敌方飞机Y坐标&&子弹Y坐标<=敌方飞机Y坐标+敌方飞机高度
10、碰撞函数如果生效,移除子弹和敌方飞机,并且分数加一
11、当点击结束界面初始化界面(刷新界面)

HTML部分

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title></title>
        <style>
            div{
                margin: 0 auto;
                width: 480px;
                height: 650px;
            }
            canvas{
                border: 1px solid;
            }
        </style>
    </head>
    <body>
        <div>
            <canvas id="myCanvas" width="480" height="650"></canvas>
        </div>
    </body>

定义各个部分状态

var START = 0;//第一阶段,欢迎阶段
            var STARTING = 1;//第二阶段,加载阶段
            var RUNNING = 2;//第三阶段,运行阶段
            var PAUSE = 3;//第三阶段,暂停阶段
            var GAMEOVER = 4;//第四阶段,游戏结束阶段
            // 0.2 定义一个标识,表示当前游戏处于哪个阶段
            var state = START;
            // 0.3 定义当前画布的宽高度
            var WIDTH = myCanvas.width;
            var HEIGHT = myCanvas.height;
            // 0.4 定义游戏得分
            var score = 0;
            // 0.5 定义我方飞机的生命值
            var life = 3;

定义背景部分

  //1.1.3 定义背景对象的构造函数  
            function Bg(config){
                this.imgs = config.imgs;
                this.width = config.width;
                this.height = config.height;
                // 定义绘制背景图片的坐标值
                this.x1 = 0,
                this.y1 = 0;
                this.x2 = 0;
                this.y2 = -this.height;
                // 定义绘制背景图片的方法
                this.paint = function(){
                    context.drawImage(this.imgs,this.x1,this.y1)
                    context.drawImage(this.imgs,this.x2,this.y2)
                }
                // 定义背景图片运动的方法
                this.step = function(){
                    // 控制两张向下移动
                    this.y1 ++;
                    this.y2 ++;
                    // 判断两张图片的临界点
                    if(this.y1 == this.height){
                        this.y1 = -this.height
                    }
                    if(this.y2 == this.height){
                        this.y2 = -this.height
                    }
                }
            }

全局控制器

setInterval(function(){
                // 绘制背景图片
                sky.paint()
                // 背景图片运动会
                sky.step()
                switch(state){
                    case START :
                        context.drawImage(logo,40,0)
                        break;
                    case STARTING : 
                        loading.paint()
                        loading.step()
                        break;
                    case RUNNING : 
                        hero.paint()
                        hero.step()
                        hero.shoot()
                        bulletsPaint()
                        bulletsStep()
                        bulletsDel()
                        enterEnemies()
                        paintEnemies()
                        stepEnemies()
                        delEnemies()
                        hitEnemies()
                        paintText()
                        break;
                    case PAUSE :
                        hero.paint()
                        paintEnemies()
                        bulletsPaint()
                        paintText()
                        context.drawImage(pause,150,300)
                        break;
                    case GAMEOVER :
                        hero.paint()
                        paintEnemies()
                        bulletsPaint()
                        paintText()
                        paintOver()
                        break;
                }
            },80)

这样我们就走完了大部分的思路,以上就是利用js制作的一个简易的飞机大战

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值