// 主游戏控制类 const {ccclass, property} = cc._decorator; @ccclass export default class GameManager extends cc.Component { @property(cc.Prefab) goal_Prefab: cc.Prefab = null; @property(cc.Prefab) middle_Prefab: cc.Prefab = null; countTime: number; //游戏总daojishi steps: number; //地图最大步数限制 tube1: cc.Node; //管子1 tube2: cc.Node; //管子2 tube3: cc.Node; //管子3 ball1: cc.Node; //球1 ball2: cc.Node; //球2 ball3: cc.Node; //球3 goal: cc.Node; //管子1 middle: cc.Node; //管子2 tube_Array: any;//管子数组 goal_Array: any;//管子数组 middle_Array: any;//管子数组 onLoad () {} start () { this.fit(); this.init(); setTimeout(() => { cc.fx.Notifications.on("moveTube", this.moveTube, this); }, 1000); } //初始化数据 init(){ this.tube1 = this.node.getChildByName("GameArea").getChildByName("tube1"); this.tube2 = this.node.getChildByName("GameArea").getChildByName("tube2"); this.tube3 = this.node.getChildByName("GameArea").getChildByName("tube3"); this.ball1 = this.node.getChildByName("GameArea").getChildByName("ball1"); this.ball2 = this.node.getChildByName("GameArea").getChildByName("ball2"); this.ball3 = this.node.getChildByName("GameArea").getChildByName("ball3"); this.goal = this.node.getChildByName("Goal"); this.middle = this.node.getChildByName("Middle"); // this.node.getChildByName("GameArea").getChildByName("tube1").zIndex = 1; // this.node.getChildByName("GameArea").getChildByName("tube2").zIndex = 1; // this.node.getChildByName("GameArea").getChildByName("tube3").zIndex = 1; this.initMap() this.initBall(); } //初始化 管子和球的关卡数据 initMap(){ this.tube_Array = this.changeMap(cc.fx.GameConfig.LEVEL_INFO[0].start,"start"); this.middle_Array = this.changeMap(cc.fx.GameConfig.LEVEL_INFO[0].middle,"middle"); this.goal_Array = this.changeMap(cc.fx.GameConfig.LEVEL_INFO[0].goal,"goal"); this.steps = cc.fx.GameConfig.LEVEL_INFO[0].steps; } /** * 转变地图参数到程序可用 * @param tagArr tagArr为目标数组,可能为二维数组 * @param name 关卡,球和管子的类型,有start,middle,goal,其中middle是二维数组,最多为3个 */ changeMap(tagArr, name){ //中间态可能有多组目标 故单独处理 if(name == "middle"){ for(let k=0; k 0){ for(let j=0; j 0){ for(let j=0; j 0 ){ for(let j =0; j 0 ){ for(let j =0; j 0){ if(this.middle_Array.length == 1){ this.createMiddle(0); } else if(this.middle_Array.length == 3){ this.createMiddle(1); this.createMiddle(2); this.createMiddle(3); // this.middle.getChildByName("part").active = false; } } } } createMiddle(num){ let nodeName = "part"; if(num != 0) nodeName = nodeName + num; let mid = this.middle.getChildByName(nodeName); mid.active = true; let mid_Arr = this.middle_Array[num-1]; for(let i=0; i 0 ){ for(let j =0; j 0) tube_Arr.pop(); if(data.start_Pos.y != 50 && tube_Arr.length > 0){ let name = "ball" + tube_Arr[tube_Arr.length-1]; this[name].getComponent("Ball").set_Touch(true); } if(data.end_Pos.y != 50){ tube_Arr = this.tube_Array[1]; if(data.end_Pos.x == -210){ tube_Arr = this.tube_Array[0]; } else if(data.end_Pos.x == 210){ tube_Arr = this.tube_Array[2]; } if(tube_Arr.length > 1){ let name = "ball" + tube_Arr[tube_Arr.length-2]; console.log(name); this[name].getComponent("Ball").set_Touch(false); } } this.gameWin(); } gameWin(){ var result = false; //如果没有中间状态,或者中间状态都已达到,则达到最终目标则算胜利 if(this.middle_Array.length == 0){ result = this.isArrEqual(this.goal_Array); if(result){ alert("成功"); } } else{ for(let i=0; i (16.2 / 9)) return false; return true; } //判断全面屏适配 setFit () { let flag = this.getSetScreenResolutionFlag(); if (flag) { } else { } return flag; } //返回首页 backScene(){ cc.director.loadScene("LoadScene"); } //下一关,或者重新开始,或者返回上一关,根据level决定 reStart(type){ } //获取时间戳 getTime(){ const timestamp = new Date().getTime(); return timestamp; } //获胜 passLevel(){ } //失败 loseLevel(type){ } //开始游戏 startGame(){ } //如果是倒计时 调用此方法 updateCountDownTime () { if (this.countTime > 0) { this.countTime -= 1; // this.time.string = cc.fx.GameTool.getTimeMargin(this.countTime); if(this.countTime < 5){ // cc.tween(this.time.node) // .to(0.25,{scale:1.5,color:cc.color(255,0,0)}) // .to(0.25,{scale:1,color:cc.color(255,255,255)}) // .start() let over = this.node.getChildByName("Over"); cc.tween(over) .to(0.2,{opacity:255}) .delay(0.1) .to(0.2,{opacity:0}) .start(); } if(this.countTime <= 0){ this.unschedule(this.updateCountDownTime); var time = 0; this.gameOver(time); } } } //上传每次操作数据 setData(){ cc.fx.GameTool.setGameData(); } //上传排行榜数据 gameOver(time){ cc.fx.GameTool.setRank(time); this.node.getChildByName("GameOver").active = true; this.node.getChildByName("GameOver").opacity = 0; cc.tween(this.node.getChildByName("GameOver")) .to(0.4,{opacity:255}) .delay(2) .to(0.4,{opacity:50}) .call(() =>{ cc.director.loadScene("OverScene"); }) .start() } onEnable () { // setTimeout(() => { // cc.fx.Notifications.on("moveTube", this.moveTube, this); // }, 100); } onDisable () { cc.fx.Notifications.off("moveTube", this.moveTube); } update (dt) { } }