import Define from "./Define"; import ButtonEffect from "./ButtonEffect"; import UserInfo from "../UserInfo"; import LDataCannon from "../datas/LDataCannon"; // Learn TypeScript: // - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/typescript.html // - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/typescript.html // Learn Attribute: // - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html // - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/reference/attributes.html // Learn life-cycle callbacks: // - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html // - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/life-cycle-callbacks.html export default class Common { public static nodeUiRoot:cc.Node; public static nodeGameRoot:cc.Node; public static nodeBallRoot:cc.Node; public static nodeGoldRoot:cc.Node; public static nodePrompt:cc.Node; public static nodeAddGold:cc.Node; public static nodeSoundRoot:cc.Node; public static nodeParticleEffects:cc.Node; public static nodeSounds:cc.Node; public static addPowerEffect:cc.Node; public static addPower:number = 1; public static pauseServer:boolean = false //每秒发射的数量/s public static shootCount:number = 3; public static bulletWidth:number = 25; public static isFirstCreatStone:boolean = true; //是否正在游戏中 public static isPlaying:boolean = false; //是否暂停 public static isPause:boolean = false; //是否游戏失败 public static isGameOver:boolean = false; //是否开启声音 public static isOpenSound:boolean = true; //是否可以复活 public static isCanRevive = true; public static isGod:boolean = false; //离线期间的奖励 public static offLineRewardCount:number = 0; public static isShowGoldFlyEffect:boolean = false; //是否是在主界面进行的登录 public static isInMainViewLogin:boolean = true; //当前使用的id public static curUseCannonId:number = 0 public static curDataCannon:LDataCannon; //游戏中玩家的数据 public static curLevelScore:number = 0; //当前关卡的分数 public static maxLevelScore:number = 0; //当前关卡需要通关的分数 public static totalShowScore:number = 0; //统计显示分数 每次攻击球涨一分 public static curLevel:number = 0; //当前关卡数 public static curLevelGold:number = 0; //当前关卡收集的钱 public static lastShowScore:number = 0; //上次的分数 public static resetDatas(){ this.curLevel = UserInfo.curLevel; this.curLevelScore = 0; this.curLevelGold = UserInfo.curGold; this.totalShowScore = this.lastShowScore; this.isFirstCreatStone = true; this.isCanRevive = true; this.isGod = false; this.addPower = 1 } public static getRandom(min:number,maxr:number):number{ // 0 2 返回 0 1 return Math.floor(Math.random() *(maxr - min) + min); } public static isCollision(circleNode:cc.Node,rectNode:cc.Node,radius:number):boolean{ //圆形中心与矩形中心的相对坐标 var x = circleNode.x - rectNode.x; var y = circleNode.y - rectNode.y; var minX = Math.min(x, rectNode.getContentSize().width /2); var maxX = Math.max(minX, -rectNode.getContentSize().width/2); var minY = Math.min(y, rectNode.getContentSize().height/2); var maxY = Math.max(minY, -rectNode.getContentSize().height/2); if((maxX - x) * (maxX - x) + (maxY - y) * (maxY - y) <= radius * radius) { return true; } else { return false; } } //获得子弹偏移 public static getBulletOffsetX(row:number,index:number):number{ if(row%2 == 0) //是偶数 { let count = Math.floor(row/2); // 2 0 1 2 3 if(count > index) { return 16 * -1 * (count - index); } else{ return 16 * 1 * (row - index); } } else{ //基数 let count = Math.floor(row/2); if(count == index){ return 0 } else if(count > index) { return 25 * -1 * (count - index); } else{ return 25 * 1 * (row - index); } } } private static calculateCubicBezierPoint(t:number, p0:cc.Vec2, p1:cc.Vec2, p2:cc.Vec2):cc.Vec2 { var u:number = 1 - t; var tt:number = t * t; var uu:number = u * u; var p:cc.Vec2 = new cc.Vec2(uu * p0.x, uu * p0.y); var t1:number = 2 * u * t; var t2:cc.Vec2 = new cc.Vec2(t1 * p1.x, t1 * p1.y); var t3:cc.Vec2 = new cc.Vec2(tt * p2.x, tt * p2.y); p = new cc.Vec2(p.x + t2.x + t3.x, p.y+t2.y + t3.y); return p; } //获得一个曲线的路径 public static getBeizerList( startPoint:cc.Vec2, controlPoint:cc.Vec2, endPoint:cc.Vec2,segmentNum:number):cc.Vec2[] { let arr:cc.Vec2[] = []; for (var i:number = 1; i <= segmentNum; i++) { var t:number = i / segmentNum; var pixel:cc.Vec2 = this.calculateCubicBezierPoint(t, startPoint,controlPoint, endPoint); arr.push(pixel); } return arr; } /* 当最大分数≥200时,超过的200的分数全部使用【ID9】的颜色, 200以下的分数分为10个阶段,阶段数字越大使用的颜色ID越大。 50≤最大分数<200时,同样分为10个阶段,根据数字大小进行ID使用。数字越大使用ID颜色越大 使用id0--id9的颜色 10≤最大分数分数<50时,使用分数/10,分5个阶段,根据分数大小进行颜色划分 阶段数字越大,使用的颜色ID越大。可选为全部颜色【ID0-5】 1≤最大分数<10时,使用最大分数/3.可选颜色为【ID0-ID3】 阶段数字越大,使用的颜色ID越大 */ public static getStoneColor(levelMaxScore:number,score:number):cc.Color{ let colorIndex = 0; if(levelMaxScore >= 200){ if(score >= 200){ colorIndex = 9; }else{ colorIndex = Math.ceil(score/20) - 1; } }else if(levelMaxScore < 200 && levelMaxScore >= 50){ let tempValue = levelMaxScore /10 colorIndex = Math.ceil(score/tempValue) - 1; }else if(levelMaxScore < 50 && levelMaxScore >= 10){ let tempValue = levelMaxScore /5 colorIndex = Math.ceil(score/tempValue) - 1 } else if(levelMaxScore < 10 && levelMaxScore >= 1){ let tempValue = levelMaxScore /3 colorIndex = Math.ceil(score/tempValue) - 1 } return Define.ballColorRGBArr[colorIndex]; } //添加点击事件 public static addClickEvent(node:cc.Node,call:Function,isClickEffect:boolean = true){ if(node != null){ let effect = node.addComponent(ButtonEffect); effect.setClickCallBack(call,isClickEffect); } } //快速排序 public static quickSort(arr:number[]):number[]{ if(arr.length <= 1){ return arr; } var pivotIndex = Math.floor(arr.length/2); var pivot = arr.splice(pivotIndex,1)[0]; var left = [] as number[]; var right = [] as number[]; for(var i =0;i(cc.Label).string = str; this.nodePrompt.setScale(1,0); this.nodePrompt.runAction(cc.sequence(cc.scaleTo(0.2,1,1),cc.delayTime(1),cc.scaleTo(0.2,1,0),cc.callFunc(function(){ this.nodePrompt.active = false; }.bind(this))), ) } //获得显示的数字 public static getShowNumber(num:number):string{ let suffix:string = ""; if(num >= 10000){ num = Math.floor((num * 0.0001)*100)/100; suffix = "w"; }else if(num >= 1000){ num = Math.floor((num * 0.001)*100)/100; suffix = "k"; } let tt = Number(num).toFixed(1).toString(); if (tt.search(".") != -1){ while(tt.substr(tt.length - 1,1) == "0"){ tt = tt.substr(0,tt.length-1); } if(tt.substr(tt.length - 1,1) == "."){ tt = tt.substr(0,tt.length-1); } } let showNumber = tt + suffix; return showNumber; } //判断当前日期为当月第几周 public static getMonthWeek(a, b, c):number{ //a = d = 当前日期 //b = 6 - w = 当前周的还有几天过完(不算今天) //a + b 的和在除以7 就是当天是当前月份的第几周 var date = new Date(a, parseInt(b) - 1, c), w = date.getDay(), d = date.getDate(); return Math.ceil((d + 6 - w) / 7); } //判断当前日期为当年第几周 public static getYearWeek(a, b, c):number{ //date1是当前日期 //date2是当年第一天 //d是当前日期是今年第多少天 //用d + 当前年的第一天的周差距的和在除以7就是本年第几周 var date1 = new Date(a, parseInt(b) - 1, c), date2 = new Date(a, 0, 1), d = Math.round((date1.valueOf() - date2.valueOf()) / 86400000); return Math.ceil((d + ((date2.getDay() + 1) - 1)) / 7); } static compile(code):string{ var str =String.fromCharCode(code.charCodeAt(0)+code.length); for(var i=1;i