/** * 游戏工具类 * @description 依据引擎Api的工具类,用于操作引擎相关系统的开关、操作引擎相关的api属性,比如坐标 * @author 冯聪 */ export default class GameUtil { /** 获取屏幕尺寸 */ public getWinSize(): cc.Size { return cc.winSize; } /** 激活物理系统 */ public enablePhysics() { cc.director.getPhysicsManager().enabled = true; } /** 绘制物理信息 */ public debugDrawPhysicsFlag(ifDraw: boolean = false) { if (ifDraw) { cc.director.getPhysicsManager().debugDrawFlags = cc.PhysicsManager.DrawBits.e_aabbBit | cc.PhysicsManager.DrawBits.e_jointBit | cc.PhysicsManager.DrawBits.e_shapeBit; } else { cc.director.getPhysicsManager().debugDrawFlags = 0; } } private btnTimeDic: Object; /**给按钮做连续点击检测 * @param btn 点击的按钮 * @param delay 按钮连续点击间隔,delay间隔内不能连续点击 * @return true 可以点击 */ public checkContinuousClick(btn:cc.Node, delay: number = 1): boolean { if (this.btnTimeDic == null) { this.btnTimeDic = {}; } let key = (btn as any)._id; let last: number = this.btnTimeDic[key]; let now: number = new Date().getTime(); var b = last == null || now - last > delay * 1000; if (b) { this.btnTimeDic[key] = now; } return b; } /** * 获取世界坐标 * @param 需要获取的节点 */ public getWorldPos(node: cc.Node): cc.Vec2 { let originX = node.x; let originY = node.y; let curNode = node; while (curNode.parent) { let parent = curNode.parent; if (parent.name == 'Canvas') { break; } originX += parent.x; originY += parent.y; curNode = parent; } return new cc.Vec2(originX, originY); } /** node的坐标改为全局坐标 中间为原点 */ public localConvertWorldPointARCenter(node: cc.Node) { let o1 = cc.view.getVisibleSize(); let o2 = node.convertToWorldSpaceAR(cc.v2(0, 0)); o2.x = o2.x - o1.width / 2; o2.y = o2.y - o1.height / 2; return o2; } }