美文网首页
从零开始手把手教你使用javascript+canvas开发一个

从零开始手把手教你使用javascript+canvas开发一个

作者: __豆约翰__ | 来源:发表于2020-12-31 14:45 被阅读0次

项目演示

项目演示地址:

体验一下

项目源码:

项目源码

代码结构

本节做完效果

info.js

 //画出塔的攻击范围以及升级等信息
    drawScope : function(tower){
        
        var select = Game.canvasList.select;
        
        Canvas.clear(select,500,500);
        
        Canvas.fillArc(select,tower.x+25,tower.y+25,TowerType[tower.type]["level_"+tower.level].scope,"rgba(25,174,70,0.5)");
        
        if(tower.level < 3)Canvas.drawImg(select,Game.imgList.btn_img,0,0,20,20,tower.x,tower.y,20,20);
        
        Canvas.drawImg(select,Game.imgList.btn_img,20,0,20,20,tower.x+30,tower.y+30,20,20);
    },
    //升级或卖掉
    upgradeOrSell : function(x,y){
        
        var tower = Game.nowSelectTower;
        //升级
        if(tower.level < 3 && T.pointInRect({x:x,y:y},{x:tower.x,y:tower.y,width:20,height:20})){
            
            if(this.score - TowerType[tower.type]["level_"+(tower.level+1)].buyIt < 0)return false;
            
            tower.level += 1;
            
            this.updateScore(TowerType[tower.type]["level_"+tower.level].buyIt * -1);
            
            this.drawScope(tower);
            //update
        }
        //卖掉
        else if(T.pointInRect({x:x,y:y},{x:tower.x+30,y:tower.y+30,width:20,height:20})){
            
            var money = Math.floor((tower.level * TowerType[tower.type]["level_1"].buyIt)/2);
            
            this.updateScore(money);
            
            delete this.installTower[Math.floor(tower.x/50)+"_"+Math.floor(tower.y/50)];
            
            Game.towerList.remove(tower);
            
            Canvas.clearRect(Game.canvasList.tower,tower.x,tower.y,tower.width,tower.height);
            
            Canvas.clear(Game.canvasList.select,500,500);
            
            tower = null;
            //sell
        }
    }

enemy.js

game.js


新增initBind 函数

//初始化绑定塔的事件
    initBind : function(){
        
        var select = document.getElementById("select");
        
        select.onclick = function(e){
            
            var x = e.offsetX || e.layerX,
                y = e.offsetY || e.layerY;
            //遍历塔的列表
            for(var i=0,l=Game.towerList.length;i<l;i++){
                //判断是否选择到了塔
                if(T.pointInRect({x:x,y:y},Game.towerList[i])){
                    //画出范围
                    Info.drawScope(Game.towerList[i]);
                    
                    if(Game.nowSelectTower){
                        //升级或卖掉
                        Info.upgradeOrSell(x,y);
                    }
                    
                    Game.nowSelectTower = Game.towerList[i];
                    
                    break;
                }
            }
            //没有选中,清除
            if(i == l){
                Canvas.clear(Game.canvasList.select,500,500);
                
                Game.nowSelectTower = null;
            }
        }
        
    }
 //重新开始
    restart : function(){
        
        this.stop();
        
        this.towerList = [];
        this.enemyList = [];
        this.bulletList = [];
        this.mission = 0;
        this.missionEnemey = 0;
        this.missionLazy = 2000;
        this.enemyLazy = 0;
        this.nowSelectTower = null;
        
        Info.score = 100;
        Info.life = 10;
        Info.mission = 1;
        Info.installTower = {};
        
        Canvas.clear(this.canvasList.map,500,500);
        Canvas.clear(this.canvasList.main,500,500);
        Canvas.clear(this.canvasList.tower,500,500);
        Canvas.clear(this.canvasList.select,500,500);
        
        Info.redraw();
        
        this.start();
    },
    //停止
    stop : function(){
        
        clearInterval(this.timer);
    },
    //结束
    over : function(){
        this.stop();
        alert("你输了!");
    },
    //赢了
    win : function(){
        this.stop();
        alert("你赢了!");
    }

项目源码:

项目源码

相关文章

网友评论

      本文标题:从零开始手把手教你使用javascript+canvas开发一个

      本文链接:https://www.haomeiwen.com/subject/fpcqoktx.html