• 飞机大战4-我的子弹


    <link rel="stylesheet" href="dafeiji.css">
    <body>
        <div id="body_main" class="main">
            <ul id="options" class="options">
                <li value="1">超级困难</li>
                <li value="2">非常困难</li>
                <li value="3">比较困难</li>
                <li value="4">就选我吧</li>
            </ul>
        </div>
    </body>
    

    `

    `

        <script>
        // 飞机大战:
            // 引擎:难度选择,logo,loading,游戏开始
            // 我的飞机:创建,跟随鼠标移动,开火
            // 我的子弹:创建,移动,死亡
            // 敌机:创建,移动,碰撞检测,死亡
        
        // 引擎:
        function Engine(){
            // E1.选择元素
            this.li = document.querySelectorAll(".options li");
            this.main = document.getElementById("body_main");
            // E2.绑定事件
            this.init();
        }
        Engine.prototype.init = function(){
            var that = this;
            for(var i=0;i<this.li.length;i++){
                this.li[i].onclick = function(){
                    // E3.存储难度,删除按钮组
                    that.v = this.value;
                    this.parentNode.remove();
                    // E4.创建logo和loading
                    that.load();
                }
            }
        }
        Engine.prototype.load = function(){
            this.logo = createDiv("logo");
            this.loading = createDiv("loading");
            // var loading=document.createElement("loading");
            // loading.className="loading";
            // this.main.appendChild(loading);
            // 切换照片 属性精确
            // var logo=document.createElement("logo");
            // logo.className="logo";
            // this.main.appendChild(logo);
            
            // loading图的切换
            var i = 0;
            this.loadingTimer = setInterval(() => {
                this.loading.style.backgroundImage = `url(images/loading${(i++)%3+1}.png)`;
            }, 300);
    
            // 背景图的运动
            var j=0;
            setInterval(()=>{
                this.main.style.backgroundPositionY = (j+=2)+"px";
            },30)
    
            setTimeout(() => {
                // E5.游戏开始
                this.gameStart()
            }, 300);
        }
        Engine.prototype.gameStart = function(){
            // 删除logo和loading,清除没用的计时器
            this.logo.remove()
            this.loading.remove()
            clearInterval(this.loadingTimer);
            // E6.开始创建我的飞机
            plane.init(this.main);
            // P3.开火
            plane.fire(this.v);
            // 敌机
            
        }
    
        // 我的飞机:
        var plane = {
            // main:document.getElementById("body_main"),
            init:function(main){
                this.main = main;
                // P1.创建我的飞机,设置默认位置
                this.ele = createDiv("my-warplain");
                this.ele.style.left = (this.main.offsetWidth - this.ele.offsetWidth)/2 + "px";
                this.ele.style.bottom = 0;
                // P2.跟随鼠标移动
                this.move();
            },
            move:function(){
                var that = this;
                document.onmousemove = function(eve){
                    var e = eve || window.event;
                    // 计算位置
                    var l = e.clientX - that.main.offsetLeft - that.ele.offsetWidth/2;
                    var t = e.clientY - that.ele.offsetHeight/2;
                    // 边界限定
                    if(l<0) l=0;
                    if(t<0) t=0;
                    if(l>that.main.offsetWidth - that.ele.offsetWidth){
                        l=that.main.offsetWidth - that.ele.offsetWidth
                    }
                    // 生效位置
                    that.ele.style.left = l + "px";
                    that.ele.style.top = t + "px";
                }
            },
            fire:function(v){
                // 根据难度,持续开火
                setInterval(() => {
                    new Bullet()
                }, 1000/v);
            }
        }
    
        // 我的子弹:
        function Bullet(){
            // B1.开始创建
            this.init();
        }
        Bullet.prototype = {
            constructor:Bullet,
            init:function(){
                // 创建
                this.ele = createDiv("bullet");
                // 设置默认位置:在飞机的头部
                this.ele.style.left = plane.ele.offsetLeft + plane.ele.offsetWidth/2 - this.ele.offsetWidth/2 + "px";
                this.ele.style.top = plane.ele.offsetTop - this.ele.offsetHeight + "px";
                // B2.开始运动
                this.move()
            },
            move:function(){
                var speed = 8;  //子弹的步长
    
                this.timer = setInterval(() => {
                    if(this.ele.offsetTop <= 100){
                        clearInterval(this.timer);
                        // B3.死亡
                        this.die()
                    }else{
                        this.ele.style.top = this.ele.offsetTop - speed + "px";
                    }
                }, 30);
            },
            die:function(){
                // 先换死亡的class
                this.ele.className = "bullet_die";
                // 切换第一张爆炸图
                setTimeout(() => {
                    this.ele.style.backgroundImage = "url(images/die2.png)";
                }, 100);
                // 删除子弹元素
                setTimeout(() => {
                    this.ele.remove()
                }, 200);
            }
        }
    
        // 敌机:
        class Enemy{
            constructor(){
    
            }
            init(){
    
            }
        }
    
        function createDiv(classname){
            var div = document.createElement("div");
            div.className = classname;
            document.getElementById("body_main").appendChild(div);
            return div;
        }
    
        new Engine();
    </script>
    
  • 相关阅读:
    mysql ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: YES)
    mysql修改root密码和设置权限
    Navicat Premium 12破解版激活
    获取/设置光标位置
    Go开发工程师
    npm包大全
    war3辅助代码及运行方式
    6.页面绘制-帖子列表页和前端路由
    5.页面绘制-主题列表页(使用ColorUI、uni-app官方组件)
    4.页面绘制-脚本页面和个人中心页面
  • 原文地址:https://www.cnblogs.com/sansancn/p/10909952.html
Copyright © 2020-2023  润新知