import { ryw_Event } from "../../../FrameWork/Event/EventEnum"; import EventMgr from "../../../FrameWork/Event/EventMgr"; import Common5 from "../../../Platform/th/Common5"; import YiMaJiang from "./YiMaJiang"; import YiMaJiangManager, { MoveDir } from "./YiMaJiangManager"; const {ccclass, property} = cc._decorator; @ccclass export default class SingleMaJiang extends cc.Component { @property(cc.Node) spFrame: cc.Node = null; @property(cc.Node) tipIcon: cc.Node = null; // LIFE-CYCLE CALLBACKS: // onLoad () {} posX:number = 0 posY:number = 0 cardNum:number = 0 _xx:number = 0 _yy:number = 0 m_x:number = 0//触摸开始的点 m_y:number = 0//触摸开始的点 m_startMove:boolean = false//是否开始移动 m_dir:MoveDir = MoveDir.None//移动方向 start () { } initCard(x,y,cardNum){ this.node.zIndex = 0 this.posX = x this.posY = y this.cardNum = cardNum this.setSpFrame(x,y,cardNum) this.openTouchEvent(this.node) } //翻牌 turnAroundCard(x,y,cardNum){ cc.tween(this.node) .to(0.1,{scaleX:0}) .call(()=>{ this.initCard(x,y,cardNum) }) .to(0.1,{scaleX:1}) .call(()=>{ YiMaJiang.getInstance().setIsXiaoChuAction(false) }) .start() } showTipIcon(bShow){ this.tipIcon.active = bShow } moveToOriginPos(){ this.node.x = this._xx this.node.y = this._yy } setSpFrame(i,j,num){ let config = YiMaJiangManager.getMjConfig() let line = config.line let col = config.col let leftTopX = -YiMaJiangManager.singleMjWidth*(col-1)/2 let leftTopY = YiMaJiangManager.singleMjHeight*(line-1)/2 this._xx = leftTopX + j*YiMaJiangManager.singleMjWidth this._yy = leftTopY - i*YiMaJiangManager.singleMjHeight this.node.x = this._xx this.node.y = this._yy this.node.attr({posX:i,posY:j,cardNum:num}) if(num == 0){ this.spFrame.scale = 1 this.spFrame.scale = 1 this.spFrame.y = 0 }else{ this.spFrame.scale = 0.8 this.spFrame.scale = 0.8 this.spFrame.y = 6 } Common5.getSpriteFrameFromBundle("YiMaJiang", "texture/pai/pai_"+num,this.spFrame.getComponent(cc.Sprite) ); } getCardX(){ return this._xx } getCardY(){ return this._yy } getCardPosX(){ return this.posX } getCardPosY(){ return this.posY } getCardNum(){ return this.cardNum } openTouchEvent(node){ node.on(cc.Node.EventType.TOUCH_START,this.touchStartNode,this) node.on(cc.Node.EventType.TOUCH_CANCEL,this.touchEndNode,this) node.on(cc.Node.EventType.TOUCH_MOVE,this.touchMoveNode,this) node.on(cc.Node.EventType.TOUCH_END,this.touchEndNode,this) } closeTouchEvent(node:cc.Node){ node.off(cc.Node.EventType.TOUCH_START,this.touchStartNode,this) node.off(cc.Node.EventType.TOUCH_CANCEL,this.touchEndNode,this) node.off(cc.Node.EventType.TOUCH_MOVE,this.touchMoveNode,this) node.off(cc.Node.EventType.TOUCH_END,this.touchEndNode,this) } touchStartNode(event) { if(YiMaJiang.getInstance().getIsXiaoChuAction()){ return } let target = event.target; let posi = event.getLocation()//世界坐标 posi = target.parent.convertToNodeSpaceAR(posi) this.m_x = posi.x this.m_y = posi.y this.m_startMove = true this.m_dir = MoveDir.None YiMaJiangManager.touchStartInitData() YiMaJiang.getInstance().setCanMoveMJInfo(null) // console.log('posX,posY,cardNum==',target.posX,target.posY,target.cardNum) let result = YiMaJiangManager.checkClickIsCanClearUp(target.posX,target.posY) // console.log('result==',result) if(result){ YiMaJiang.getInstance().setIsXiaoChuAction(true) let mj1 = {posX:target.posX,posY:target.posY} let mj2 = result EventMgr.emitEvent_custom(ryw_Event.XiaoChuMJ,mj1,mj2 ) } } touchMoveNode(event) { if(YiMaJiang.getInstance().getIsXiaoChuAction()){ return } let target = event.target let posi = event.getLocation()//世界坐标 posi = target.parent.convertToNodeSpaceAR(posi) // target.setPosition(posi) let mjPosData = {posX:target.posX,posY:target.posY} let x = posi.x let y = posi.y if(this.m_startMove && (Math.abs(this.m_x - x) > 10 || Math.abs(this.m_y - y) > 10) ){ this.m_startMove = false if(Math.abs(this.m_x - x) > Math.abs(this.m_y - y)){ if(this.m_x < x){ this.m_dir = MoveDir.Right }else{ this.m_dir = MoveDir.Left } }else{ if(this.m_y < y){ this.m_dir = MoveDir.Up }else{ this.m_dir = MoveDir.Down } } YiMaJiang.getInstance().setCanMoveMJInfo(YiMaJiangManager.getCanMoveMJByDir(this.m_dir,mjPosData)) } let disData = {disX:x-this.m_x,disY:y-this.m_y} this.moveAllTiled(this.m_dir,mjPosData,disData,YiMaJiang.getInstance().getCanMoveMJInfo()) } moveAllTiled(dir,mjPosData,disData,canMoveMJInfo){ if(!canMoveMJInfo){ return } let canMoveMjData = canMoveMJInfo.canMoveMjData let maxMoveStep = canMoveMJInfo.maxMoveStep if(maxMoveStep <= 0){ return } let moveStep = 0 //移动距离约束 if(dir == MoveDir.Up){ if(disData.disY > maxMoveStep*YiMaJiangManager.singleMjHeight){ disData.disY = maxMoveStep*YiMaJiangManager.singleMjHeight }else if(disData.disY < 0){ disData.disY = 0 } disData.disX = 0 moveStep = Math.round(disData.disY/YiMaJiangManager.singleMjHeight) }else if(dir == MoveDir.Down){ if(disData.disY < -maxMoveStep*YiMaJiangManager.singleMjHeight){ disData.disY = -maxMoveStep*YiMaJiangManager.singleMjHeight }else if(disData.disY > 0){ disData.disY = 0 } disData.disX = 0 moveStep = Math.round(disData.disY/YiMaJiangManager.singleMjHeight) }else if(dir == MoveDir.Left){ if(disData.disX < -maxMoveStep*YiMaJiangManager.singleMjWidth){ disData.disX = -maxMoveStep*YiMaJiangManager.singleMjWidth }else if(disData.disX > 0){ disData.disX = 0 } disData.disY = 0 moveStep = Math.round(disData.disX/YiMaJiangManager.singleMjWidth) }else if(dir == MoveDir.Right){ if(disData.disX > maxMoveStep*YiMaJiangManager.singleMjWidth){ disData.disX = maxMoveStep*YiMaJiangManager.singleMjWidth }else if(disData.disX < 0){ disData.disX = 0 } disData.disY = 0 moveStep = Math.round(disData.disX/YiMaJiangManager.singleMjWidth) } moveStep = Math.abs(moveStep) YiMaJiangManager.setMoveTempMjData(dir,canMoveMjData,moveStep,true) EventMgr.emitEvent_custom(ryw_Event.MoveMJ,dir,moveStep,mjPosData,disData,canMoveMJInfo) } touchEndNode(event) { if(YiMaJiang.getInstance().getIsXiaoChuAction()){ return } let canMoveMJInfo = YiMaJiang.getInstance().getCanMoveMJInfo() if(!canMoveMJInfo){ return } let canMoveMjData = canMoveMJInfo.canMoveMjData console.log('canMoveMjData==',canMoveMjData) let maxMoveStep = canMoveMJInfo.maxMoveStep if(maxMoveStep <= 0){ return } let target = event.target let mjPosData = {posX:target.posX,posY:target.posY} let posi = event.getLocation()//世界坐标 posi = target.parent.convertToNodeSpaceAR(posi) let x = posi.x let y = posi.y let dir = this.m_dir let disData = {disX:x-this.m_x,disY:y-this.m_y} let moveStep = 0 //移动距离约束 if(dir == MoveDir.Up){ if(disData.disY > maxMoveStep*YiMaJiangManager.singleMjHeight){ disData.disY = maxMoveStep*YiMaJiangManager.singleMjHeight }else if(disData.disY < 0){ disData.disY = 0 } disData.disX = 0 moveStep = Math.round(disData.disY/YiMaJiangManager.singleMjHeight) }else if(dir == MoveDir.Down){ if(disData.disY < -maxMoveStep*YiMaJiangManager.singleMjHeight){ disData.disY = -maxMoveStep*YiMaJiangManager.singleMjHeight }else if(disData.disY > 0){ disData.disY = 0 } disData.disX = 0 moveStep = Math.round(disData.disY/YiMaJiangManager.singleMjHeight) }else if(dir == MoveDir.Left){ if(disData.disX < -maxMoveStep*YiMaJiangManager.singleMjWidth){ disData.disX = -maxMoveStep*YiMaJiangManager.singleMjWidth }else if(disData.disX > 0){ disData.disX = 0 } disData.disY = 0 moveStep = Math.round(disData.disX/YiMaJiangManager.singleMjWidth) }else if(dir == MoveDir.Right){ if(disData.disX > maxMoveStep*YiMaJiangManager.singleMjWidth){ disData.disX = maxMoveStep*YiMaJiangManager.singleMjWidth }else if(disData.disX < 0){ disData.disX = 0 } disData.disY = 0 moveStep = Math.round(disData.disX/YiMaJiangManager.singleMjWidth) } moveStep = Math.abs(moveStep) console.log('移动格子数==',moveStep) let result = YiMaJiangManager.moveEndCheckXiaoChu(dir,canMoveMjData,moveStep,mjPosData) console.log('移动结束result==',result) //可消除,直接停在当前位置 if(result && result.mj2){ // let mj1 = {posX:target.posX,posY:target.posY} // let mj2 = result // EventMgr.emitEvent_custom(ryw_Event.XiaoChuMJ,mj1,mj2 ) YiMaJiang.getInstance().moveToFixedPos(result.mj1,result.mj2) //不可消除,弹回初始位置 }else{ YiMaJiang.getInstance().moveToOriginPos() } } moveUp(){ console.log('上==') } moveDown(){ console.log('下==') } moveLeft(){ console.log('左==') } moveRight(){ console.log('右==') } // update (dt) {} }