const { WinType,PlayerAction } = require( "define" ); // 工具类的全局 window.Utils = { _effect_once_playing: false, _effect_once_last: null, _effect_once_list: null, keyfind: function ( key, val, arr ) { for( var i = 0, n = arr.length;i < n;i++ ) { if( arr[ i ][ key ] == val ) { return arr[ i ]; } } return null; }, randomNum: function ( min, max ) { if( max > min ) { return Math.round( Math.random() * ( max - min ) ) + min; } else { return min; } }, randomStr: function ( min, max, strRange ) { var n = this.randomNum( min, max ); strRange = strRange || '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; var str = ""; var len = strRange.length; for( var i = 0;i < n;i++ ) { var pos = this.randomNum( 1, len ) - 1; str += strRange.charAt( pos ); } return str; }, TI18N: function ( str ) { return str; }, // 获取单位配置 getUnitConfig: function ( id ) { return gunitdata( "data_unit", id )||gunitdata("data_unit1",id)||gunitdata("data_unit2",id)||gunitdata("data_unit3",id)//gdata( "unit_data", id, false) || gdata( "unit_data1", id, false) || gdata("unit_data2", id)|| gdata("unit_data3", id) }, // 获取物品配置数据 getItemConfig: function ( id ) { return gitemdata( id )//gdata( "item_data", "data_unit1", id, false ) || gdata( "item_data", "data_unit2", id, false ) || gdata( "item_data", "data_unit3", id, false ) || gdata( "item_data", "data_unit4", id, false ) || gdata( "item_data", "data_unit5", id, false ) }, // 拼key getNorKey: function ( ...value ) { var key = "" for( let index = 0;index < value.length;index++ ) { const element = value[ index ]; if( key != "" ) { key = key + "_"; } key = key + element; } return key }, isEmpty: function ( obj ) { for( var objIndex in obj ) { return false; } return true; }, //返回数组或对象的下一个索引值 //(实际只能用来判断是否为空,不能用来循环获取索引值) next: function ( arr ) { for( var k in arr ) { if( arr[ k ] != null ) { return true } } return null }, // 多元素小到大 tableLowerSorter: function ( array ) { return function ( a, b ) { if( a == null || b == null ) { return 1 } for( let index = 0;index < array.length;index++ ) { const element = array[ index ]; if( a[ element ] == null || b[ element ] == null ) { return 1 } if( a[ element ] != b[ element ] ) { return a[ element ] - b[ element ] } } return 1 } }, // 多元素从大到小 tableUpperSorter: function ( array ) { return function ( a, b ) { if( a == null || b == null ) { return -1 } for( let index = 0;index < array.length;index++ ) { const element = array[ index ]; if( a[ element ] == null || b[ element ] == null ) { return -1 } if( a[ element ] != b[ element ] ) { return b[ element ] - a[ element ] } } return -1 } }, /*按需排序 temp_tab 需要比较的表项中的多个key值,用于多参数的比较 temp_tab = {{"参数名字", true}, {"参数名字", false}...} --true 表示 大到小 false 表示 小到大 */ tableCommonSorter: function ( temp_tab ) { return function ( a, b ) { if( a == null || b == null ) { return -1 } for( var i = 0;i < temp_tab.length;i++ ) { const element = temp_tab[ i ]; if( a[ element[ 0 ] ] == null || b[ element[ 0 ] ] == null ) { return -1 } var is_sort = element[ 1 ] || false; if( is_sort ) { if( a[ element[ 0 ] ] != b[ element[ 0 ] ] ) { return b[ element[ 0 ] ] - a[ element[ 0 ] ] } } else { if( a[ element[ 0 ] ] != b[ element[ 0 ] ] ) { return a[ element[ 0 ] ] - b[ element[ 0 ] ] } } } return -1 } }, // 创建一个需要require的类 createClass: function ( window_name, any ) { if( window_name == null || window_name == "" ) { cc.error( "创建窗体失败,没有给具体名字 ========>>" ) } var WindowClass = require( window_name ) return new WindowClass( any ); }, /** * 播放一次特效,临时创建一个节点数据,播放完特效之后移除 * @param {*} effect_name 特效资源名 * @param {*} x 坐标X * @param {*} y 坐标Y * @param {*} parent 父节点 * @param {*} finish_call 播放完的回调 * @param {*} action_name 播放动作,默认为action * @param {*} scale 缩放比,理论上不需要设置 */ playEffectOnce: function ( effect_id,effect_name, x, y, parent, finish_call, action, sc ) { if( parent == null ) return; let action_name = action || PlayerAction.action; let scale = sc || 1; // 创建临时的节点 var node = new cc.Node( "once_effect" ); node.setAnchorPoint( 0.5, 0.5 ); if( scale != 1 ) { node.scale = scale; } node.setPosition( x, y ); parent.addChild( node ); var effect_spine = node.addComponent( sp.Skeleton ); var res_path = PathTool.getSpinePath( effect_id, effect_name,false ); // 监听事件 effect_spine.setCompleteListener( ( function ( trackEntry, loopCount ) { var animationName = trackEntry.animation ? trackEntry.animation.name : ""; if( animationName == action_name ) { node.removeFromParent(); nx.dt.fnInvoke( finish_call, true ); } } ).bind( this ) ) // 加载资源 cc.loader.loadRes(res_path, sp.SkeletonData, (err,obj)=>{ if(err){ nx.dt.fnInvoke( finish_call, true ); node.removeFromParent(); return; } effect_spine.skeletonData = obj effect_spine.setAnimation( 0, action_name, false ); }); }, //计算字符串长度,汉字算两个长度 //(如果汉字算一个长度,直接string.length可以获得) getByteLen: function ( val ) { var len = 0; for( var i = 0;i < val.length;i++ ) { var a = val.charAt( i ); if( a.match( /[^\x00-\xff]/ig ) != null ) { len += 2; } else { len += 1; } } return len; }, //按钮置灰,并关闭事件,btn:cc.Button, bool:true是变灰 setGreyButton: function ( btn, bool ) { if( bool == null ) bool = true if( btn ) { btn.interactable = !bool; btn.enableAutoGrayEffect = bool; } }, getTimeInterval: function ( time_stamp ) { if( !( time_stamp >= 0 ) ) return; var srver_time = client.socket.getTime(); return time_stamp - srver_time; }, // 将秒转为标准时间, 参数:秒数, 是否加0 changeIntevalToDate: function ( secondNum, n_addo ) { if( !( secondNum >= 0 ) ) return; var daySecond = 24 * 60 * 60; var hourSecond = 60 * 60; var day = Math.floor( secondNum / daySecond ); var remainSecondM = secondNum % daySecond; var hour = Math.floor( remainSecondM / hourSecond ); var remainSecondS = remainSecondM % hourSecond; var minute = Math.floor( remainSecondS / 60 ); var second = Math.ceil( remainSecondS % 60 ); if( n_addo ) { return { D: day, H: hour, M: minute, S: second }; } var add0 = function ( m ) { return m < 10 ? ( '0' + m ) : m; }; return { D: day, H: add0( hour ), M: add0( minute ), S: add0( second ) }; }, //-----------------------moneytool---start-------------// //转换金钱格式 getMoneyString: function ( value, is_symbol, isFixed ) { if( is_symbol == null ) is_symbol = true; if( value == null ) return 0 // if(value < 1000){ if( value < 100000 ) { if( is_symbol ) return this.moneyFormat( value ); else return value; } else if( value < 1000000 && value >= 1000 ) { value = Utils.moneyFormat2( value, isFixed );// Math.floor( value * 0.001 ); if( is_symbol ) return cc.js.formatStr( this.moneyFormat( value ), "K" ); else return cc.js.formatStr( value, "K" ); } else if( value < 1000000000 && value >= 1000000 ) { let fix2 = 1; if( !isFixed ) { fix2 = 1; } value = Utils.moneyFormat2( value, fix2 );// value = Math.floor( value * 0.0001 ); if( is_symbol ) return cc.js.formatStr( this.moneyFormat( value ), "M" ); else return cc.js.formatStr( value, "M" ); } else { value = Utils.moneyFormat2( value, 1 );//value = Math.floor( value * 0.000001 );//00000001 if( is_symbol ) return cc.js.formatStr( this.moneyFormat( value ), "B" ); else return cc.js.formatStr( value, "B" ); } }, moneyFormat2: function ( value, index = 1 ) { let base = 1000; let truevalue = value; while( truevalue >= base ) { truevalue = truevalue / base; } if( index != 3 ) { truevalue = truevalue.toFixed( 2 ); } return truevalue; }, //价钱里面加上逗号 moneyFormat: function ( value ) { var sign = ""; if( value < 0 ) { sign = "-"; value = value * ( -1 ); } if( value < 1000 ) return String( value ); var arr = this.moneySplit( String( value ), "" ); var n = arr.length; var i = n % 3; if( i == 0 ) { i = 4; } while( i < n ) { arr.splice( i, 0, "," ) i = i + 4; n = n + 1; } return sign + this.Join( arr, "" ); }, moneySplit: function ( source_str, split_str ) { if( split_str.length == 0 ) { var arr = []; for( var i = 0;i < source_str.length;i++ ) { arr.push( source_str.substring( i, i + 1 ) ); } return arr } else { return this.Split( source_str, split_str ) } }, //-----------------------moneytool---end-------------// // 以某个分隔符为标准,分割字符串 // @param split_string 需要分割的字符串 // @param splitter 分隔符 // @return 用分隔符分隔好的table Split: function ( split_string, splitter ) { var split_result = {}; var search_pos_begin = 0; while( true ) { var find_pos_begin = split_string.indexOf( splitter, search_pos_begin ); var find_pos_end = splitter.length + find_pos_begin; if( find_pos_begin == -1 ) break split_result[ Object.keys( split_result ).length + 1 ] = split_string.substring( search_pos_begin, find_pos_begin - 1 ); search_pos_begin = find_pos_end + 1; } if( search_pos_begin <= split_string.length ) { split_result[ Object.keys( split_result ).length + 1 ] = split_string.substr( search_pos_begin ); } return split_result }, // 以某个连接符为标准,返回一个table所有字段连接结果 // @param join_table 连接table:array // @param joiner 连接符 // @param return 用连接符连接后的字符串 Join: function ( join_table, joiner ) { if( joiner == null ) { return join_table.join( "" ); } else { return join_table.join( joiner ); } }, //区分服务器名称 transformNameByServ: function ( name, srv_id ) { var tmpName = name; if( srv_id == null || name == null ) return tmpName if( name ) { if( tmpName.indexOf( "【" ) != -1 ) { return tmpName } } if( !require( "role_controller" ).getInstance().isTheSameSvr( srv_id ) ) { var vo = require( "role_controller" ).getInstance().getRoleVo(); if( vo ) { var listOr = this.Split( srv_id, "_" ); var listMe = this.Split( vo.srv_id, "_" ); if( listOr[ 2 ] && listMe[ 1 ] && listOr[ 1 ] != listMe[ 1 ] ) { tmpName = cc.js.formatStr( nx.text.getKey( "msg_utils" ), tmpName ); } else if( Object.keys( listOr ).length > 1 ) { tmpName = cc.js.formatStr( nx.text.getKey( "msg_utils_server" ), listOr[ Object.keys( listOr ).length ], tmpName ); } if( srv_id == "robot_1" ) tmpName = name; } } return tmpName }, // 配置格式装换 splitDataStr: function ( content ) { var result = content; while( result.indexOf( "{" ) != -1 ) { var i = result.indexOf( "{" ); var n = result.indexOf( "}" ); var temp = result.substring( i, n + 1 ); var target = temp.substring( 1, temp.length - 1 ); var list = this.Split( target, ":" ) var str = cc.js.formatStr( "%s", gdata( "color_data", "data_color3", parseInt( list[ 1 ] ) ), list[ 2 ] ) result = result.replace( temp, str ) } var RoleController = require( "role_controller" ); var role_vo = RoleController.getInstance().getRoleVo(); if( role_vo ) { result = result.replace( /~n/g, role_vo.name ) } return result; }, //desc:创建一个普通文本 createLabel: function ( font_size, text_color, line_color, x, y, text_content, parent_wnd, line_num, anchorpoint, font ) { font_size = font_size || 20; var node = new cc.Node(); node.setAnchorPoint( anchorpoint || cc.v2( 0, 0 ) ); var label = node.addComponent( cc.Label ); label.fontSize = font_size; label.horizontalAlign = cc.macro.TextAlignment.CENTER; label.verticalAlign = cc.macro.TextAlignment.CENTER; if( text_color == null ) text_color = new cc.Color( 0xff, 0xff, 0xff, 0xff ); node.color = text_color; if( line_color ) { var line = node.addComponent( cc.LabelOutline ); line.color = line_color; line.width = line_num || 1; } x = x || 0; y = y || 0; node.setPosition( x, y ); if( text_content != null ) label.string = text_content; if( parent_wnd ) parent_wnd.addChild( node ); return label }, //desc:创建富文本 createRichLabel: function ( fontsize, textcolor, ap, pos, lineHeight, max_width, parent_wnd, align ) { var node = new cc.Node(); node.setAnchorPoint( ap || cc.v2( 0, 0 ) ); node.setPosition( pos || cc.v2( 0, 0 ) ); var label = node.addComponent( cc.RichText ); if( textcolor == null ) textcolor = new cc.Color( 0xff, 0xff, 0xff, 0xff ); label.fontSize = fontsize; label.horizontalAlign = cc.macro.TextAlignment.CENTER; label.verticalAlign = cc.macro.TextAlignment.CENTER; if( align == "left" ) { label.horizontalAlign = cc.macro.TextAlignment.LEFT; } else if( align == "right" ) { label.horizontalAlign = cc.macro.TextAlignment.RIGHT; } label.lineHeight = lineHeight || ( fontsize + 4 ); node.color = textcolor; label.maxWidth = max_width || 300; if( parent_wnd ) parent_wnd.addChild( node ); return label }, //desc:创建image createAtlasImage: function ( parent, res, x, y, anchorPoint, usePlist, zorder, is_Scale9 ) { var node = new cc.Node(); var image = node.addComponent( cc.Sprite ); if( res != null ) { nx.gui.setAtlasFrame( image, "", res ); } if( anchorPoint == null ) { node.setAnchorPoint( cc.v2( 0.5, 0.5 ) ); } else { node.setAnchorPoint( anchorPoint ); } if( is_Scale9 == true ) { image.type = cc.Sprite.Type.SLICED; image.sizeMode = cc.Sprite.SizeMode.CUSTOM; } if( x != null && y != null ) { node.setPosition( cc.v2( x, y ) ); } if( parent ) { parent.addChild( node, zorder || 0 ); } return image }, getPixelFormat( spine_name ) { if( spine_name == null ) { return cc.Texture2D.PixelFormat.RGBA4444; } let pf = cc.Texture2D.PixelFormat.RGBA4444; let frist_letter = spine_name.substr( 0, 1 ) if( frist_letter == "E" && game.configs.special_spine_data ) { let pf_value = game.configs.special_spine_data.data_effect[ spine_name ] if( pf_value == 1 ) { pf = cc.Texture2D.PixelFormat.RGBA8888 } } return pf }, //获取数组或对象具有真实子类的长度 getArrTrueLen: function ( obj ) { var index = 0; for( var i in obj ) { var v = obj[ i ]; if( v != null ) { index = index + 1; } } return index }, //获取数组或对象的长度 getArrLen: function ( obj ) { if( obj instanceof Array ) { return obj.length } else { return Object.keys( obj ).length } }, // 延迟动作 delayRun: function ( obj, delay_time, fun ) { nx.error( "delayRun该方法已弃用,遇到及时修改" ); if( !fun ) return; if( obj == null ) { fun(); } var delay_fun = cc.delayTime( delay_time ); var call_fun = cc.callFunc( function () { if( obj != null ) { fun(); } } ); obj.runAction( cc.sequence( delay_fun, call_fun ) ); }, /** * 统一处理点击事件,为了后面统一音效做处理 * @param {*} object 节点对象 * @param {*} clickback 点击回调 * @param {*} soundType 声音类型 1:普通音效 2:关闭音效 3.... */ onTouchEnd: function ( object, clickback, soundType ) { nx.error( "onTouchEnd该方法已弃用,遇到及时修改" ); if( !object ) { if( clickback ) { clickback(); } return; } object.on( cc.Node.EventType.TOUCH_END, function ( event ) { Utils.playButtonSound( soundType ); if( clickback ) { clickback( event ) } } ); }, /** * 播放音效接口 * @param {*} type 1:普通按钮音效 2:关闭按钮音效 3:标签页音效 4..自定义音效id */ playButtonSound: function ( type ) { nx.error( "playButtonSound该方法已弃用,遇到及时修改" ); // if( !type ) return; // var res_id = null; // if( type == ButtonSound.Normal ) { // res_id = "c_button1"; // } else if( type == ButtonSound.Close ) { // res_id = "c_close"; // } else if( type == ButtonSound.Tab ) { // res_id = "c_002"; // } else { // res_id = type; // } // SoundManager.getInstance().playEffect( AUDIO_TYPE.COMMON, res_id ); }, playEffectSound: function ( type, res_id ) { nx.error( "playEffectSound该方法已弃用,请使用nx.audio.playSFX" ); // SoundManager.getInstance().playEffectOnce( type, res_id ); }, playMusic: function ( type, res_id, loop ) { nx.error( "playMusic该方法已弃用,不需要这个方法" ); // SoundManager.getInstance().playMusic( type, res_id, loop ); }, //获取随机名字 getRandomSaveName: function () { nx.error( "getRandomSaveName该方法已弃用." ); var randomName = function ( str ) { var result = str; var a = String.fromCharCode( Math.random( 65, 90 ) ); var b = String.fromCharCode( Math.random( 97, 122 ) ); var c = String.fromCharCode( Math.random( 48, 57 ) ); if( Math.random( 3 ) % 3 == 0 ) { result = result + a; } else if( Math.random( 3 ) % 2 == 0 ) { result = result + b; } else { result = result + c; } if( this.getByteLen( result ) < 12 ) { result = randomName( result ); } return result }.bind( this ) var usr = randomName( "" ); return "sy" + usr }, /*==============================-- --desc:获取服务器索引 --time:2018-07-22 10:54:30 --@str: --@return [index, is_var] --index == 0 表示 机器 或者 异域(就是无法知道是那个服的) --is_var : 表示是否本服 --==============================--*/ getServerIndex: function ( srv_id ) { nx.error( "getServerIndex该方法已弃用." ); // if( srv_id == null ) return [ "" ] // if( srv_id == "robot_1" || srv_id == "robot" ) { //代表机器人 // return [ 0 ] // } // let RoleController = require( "role_controller" ); // let vo = RoleController.getInstance().getRoleVo(); // if( vo ) { // let listOr = srv_id.split( "_" ); // let listMe = vo.srv_id.split( "_" ); // if( listOr[ 1 ] && listMe[ 0 ] && listOr[ 0 ] != listMe[ 0 ] ) { // return [ 0 ] // } else if( listOr.length > 1 ) { // if( srv_id == vo.srv_id ) { // return [ listOr[ listOr.length - 1 ], true ] // } else { // return [ listOr[ listOr.length - 1 ] ] // } // } // } // return [ 0 ] }, // 通用显示单行道具列表 // @ item_scrollview scrollview 对象 // @ item_list BackPackItem的对象列表 (注意: 需要在那边手动移除) // @ data_list 数据列表 结构{{道具id, 数量},...} 就是策划填表的奖励道具结构 // @setting // @content // @isActionCallBack 是否调用ActionCallBack // @setting.scale 缩小参数 默认 1 // @setting.start_x 两边对应道具的间隔 // @setting.space_x 道具之间的间隔 // @setting.max_count item_scrollview最大能显示item数量..用于判断是否可以左右滑动 不填则可以移动 // @setting.is_center 是否不满就居中 max_count必须有值 // @setting.show_effect_id =特效id 显示对应特效 默认无 // @setting.is_tip 是否弹通用tips 默认nil commonShowSingleRowItemList: function ( item_scrollview, item_list, data_list, setting, content, isActionCallBack ) { nx.error( "commonShowSingleRowItemList该方法已弃用." ); if( !item_scrollview || !data_list ) { return; } var item_list = item_list; if( item_list ) { // 隐藏物品 for( var i in item_list ) { item_list[ i ].setVisible( false ); } } if( item_list == null ) { item_list = []; } if( data_list.length == 0 ) { return; } // 道具列表 var setting = setting || {}; var scale = setting.scale || 1; var start_x = setting.start_x || 5; var space_x = setting.space_x || 5; var max_count = setting.max_count; var item_width = setting.item_width || 120; var lock = setting.lock || false; // 点击返回回调函数 var is_tip = setting.is_tip; var callback = setting.callback || false; var item_count = data_list.length; item_width = item_width * scale; var total_width = start_x * 2 + item_width * item_count + space_x * ( item_count - 1 ); var item_scrollview_size = content.getContentSize(); var max_width = Math.max( item_scrollview_size.width, total_width ); content.setContentSize( cc.size( max_width, item_scrollview_size.height ) ); if( max_count && item_count <= max_count ) { item_scrollview.off( cc.Node.EventType.TOUCH_START, item_scrollview._onTouchBegan, item_scrollview, true ); item_scrollview.off( cc.Node.EventType.TOUCH_MOVE, item_scrollview._onTouchMoved, item_scrollview, true ); item_scrollview.off( cc.Node.EventType.TOUCH_END, item_scrollview._onTouchEnded, item_scrollview, true ); item_scrollview.off( cc.Node.EventType.TOUCH_CANCEL, item_scrollview._onTouchCancelled, item_scrollview, true ); if( setting.is_center ) { start_x = ( item_scrollview_size.width - total_width ) * 0.5; if( start_x < 0 ) { start_x = 0; } } } else { // item_scrollview.on(cc.Node.EventType.TOUCH_START, item_scrollview._onTouchBegan, item_scrollview, true); // item_scrollview.on(cc.Node.EventType.TOUCH_MOVE, item_scrollview._onTouchMoved, item_scrollview, true); // item_scrollview.on(cc.Node.EventType.TOUCH_END, item_scrollview._onTouchEnded, item_scrollview, true); // item_scrollview.on(cc.Node.EventType.TOUCH_CANCEL, item_scrollview._onTouchCancelled, item_scrollview, true); } content.stopAllActions(); var _setItemData = function ( item, v, i, is_tip ) { item.setVisible( true ); var _x = start_x + item_width / 2 + i * ( item_width + space_x ); item.setPosition( _x, item_scrollview_size.height * 0.5 ); item.setData( { bid: v[ 0 ], num: v[ 1 ] } ); item.showOrderWarLock( lock ); if( callback ) { if( isActionCallBack ) { item.addActionCallBack( function () { callback(); }.bind( this ) ); } else { item.addCallBack( function () { callback(); }.bind( this ) ); } } if( v[ 2 ] ) { item.setExtendLabel( v[ 2 ], null, 24 ); } item.setDefaultTip( is_tip ); if( setting.show_effect_id ) { item.showItemEffect( true, setting.show_effect_id, PlayerAction.action_1, true, 1.1 ) } else { item.showItemEffect( false ) } }.bind( this ); var item = null; var size = item_list.length; for( var i in data_list ) { item = item_list[ i ]; if( item ) { _setItemData( item, data_list[ i ], i, is_tip ); } else { var dealey = i - size; if( dealey <= 0 ) { dealey = 1; } Utils.delayRun( content, dealey / 60, function ( i, v, item, is_tip ) { if( !item_list[ i ] ) { item = ItemsPool.getInstance().getItem( "backpack_item" ); item.initConfig( true, scale ); // item.setAnchorPoint(0, 0.5) item.setParent( content ); item.show(); item_list[ i ] = item; _setItemData( item, v, i, is_tip ) } }.bind( this, i, data_list[ i ], item, is_tip ) ); } } return item_list; }, /*--通用显示空白 --@parent 父类 --@bool 显示状态 true 显示 , false 不显示 --@setting 配置信息 --setting.text 文本内容 默认: 暂无数据 --setting.pos icon显示位置 默认 父类的中心点 --setting.scale icon缩放大小 默认 1 --setting.offset_y 因图标缩放导致文本的位置需要调整 偏移量调整 默认是 -10 --setting.font_size 文本大小 默认 26 --setting.label_color 文本颜色 默认 game.configs.color_data.data_color16[175]*/ commonShowEmptyIcon: function ( parent, bool, setting ) { nx.error( "commonShowEmptyIcon该方法已弃用." ); if( !parent ) return; if( bool ) { var setting = setting || {} var text = setting.text || nx.text.getKey( "msg_utils" ); if( !parent.empty_con ) { var parent_size = parent.getContentSize(); var pos = setting.pos || cc.v2( parent_size.width * 0.5, parent_size.width * 0.5, parent_size.height * 0.5 + 10 ); var scale = setting.scale || 1; var offset_y = setting.offset_y || -110; var label_color = setting.label_color || new cc.Color().fromHEX( game.configs.color_data.data_color16[ 175 ] ); var font_size = setting.font_size || 26; var size = cc.size( 200, 200 ); parent.empty_con = new cc.Node(); parent.empty_con.setContentSize( cc.size( 120, 120 ) ) parent.empty_con.setAnchorPoint( 0.5, 0.5 ); parent.empty_con.setPosition( pos.x, pos.y ); parent.addChild( parent.empty_con, 10 ); var bg = Utils.createImage( parent.empty_con, PathTool.getIconPath( "bigbg", "bigbg_3" ), 0, 0, cc.v2( 0.5, 0.5 ), false ) bg.node.scale = scale; parent.empty_label = Utils.createLabel( font_size, label_color, null, 0, offset_y, '', parent.empty_con, 0, cc.v2( 0.5, 0.5 ) ); } else { parent.empty_con.active = true; } parent.empty_label.string = text; } else { if( parent.empty_con ) { parent.empty_con.active = false; } } }, //通用设置倒计时 时间格式默认 TimeTool.GetTimeForFunction 此方法返回格式(需要其他的 在callback 自行处理) //注意: 关闭panel的时候记得 doStopAllActions(label) 否则会报错 //@label 倒计时对象 label //@less_time 剩余时间 //@setting 配置信息 //setting.label_type 文本类型(参考 CommonAlert.type.rich) ..注意:需要增加标题 和 时间颜色 才设置这个(否则没意义) //setitng.time_title 时间标题 eg: 剩余时间: //setitng.time_color 时间颜色 格式: #ffffff 富文本下 需要变的颜色..(在is_rich_label == true下 必填) //setting.callback 回调函数 如果_setTimeFormatString 不能满足需求 自己用回调函数处理 commonCountDownTime: function ( label, less_time, setting ) { nx.error( "commonCountDownTime该方法已弃用." ); if( !label ) return var setting = setting || {}; var callback = setting.callback; //回调函数 var label_type = setting.label_type;//文本类型 var time_title = null; var time_color = null; var TimeTool = require( "timetool" ); if( label_type && label_type == "rich" ) { time_title = setting.time_title || ""; time_color = setting.time_color; } let _setTimeFormatString = function ( time ) { if( !label ) return if( callback ) { callback( time ); return } if( label_type && label_type == "rich" && time_color ) { if( time > 0 ) { label.string = cc.js.formatStr( "%s %s", time_title, time_color, TimeTool.getTimeForFunction( time ) ) } else { label.node.stopAllActions(); label.string = cc.js.formatStr( "%s 00:00:00", time_title, time_color ) } } else { if( time > 0 ) { label.string = TimeTool.getTimeForFunction( time ); } else { label.node.stopAllActions(); label.string = "00:00:00"; } } } label.node.stopAllActions(); if( less_time > 0 ) { _setTimeFormatString( less_time ); label.node.runAction( cc.repeatForever( cc.sequence( cc.delayTime( 1 ), cc.callFunc( function () { less_time = less_time - 1; _setTimeFormatString( less_time ); }.bind( this ) ) ) ) ) } else { _setTimeFormatString( less_time ); } }, //设置精灵变灰,递归下去 setChildUnEnabled: function ( node, status ) { var sp_status if( status ) { sp_status = new cc.Material.createWithBuiltin( "2d-gray-sprite" );// cc.Sprite.State.GRAY; } else { sp_status = new cc.Material.createWithBuiltin( "2d-sprite" );// cc.Sprite.State.NORMAL; } let sprites = node.getComponentsInChildren( cc.Sprite ) for( let i = 0;i < sprites.length;++i ) { sprites[ i ].setMaterial( sp_status ) } }, //--获取属性对应信息 // @attr_key 策划定义属性key 参考表attr_data.xml // @attr_val 对应值..如果是百分比 传过来的是千分比 //return 属性icon路径, 属性名字, 属性值 commonGetAttrInfoByKeyValue: function ( attr_key, attr_val ) { if( !attr_key || !attr_val ) return let attr_name = game.configs.attr_data.data_key_to_name[ attr_key ]; if( attr_name ) { var PartnerCalculate = require( "partner_calculate" ); let is_per = PartnerCalculate.isShowPerByStr( attr_key ); if( is_per == true ) { attr_val = ( attr_val / 10 ) + "%"; } let res = PathTool.getAttrIconRes( attr_key ); return { res: res, attr_name: attr_name, attr_val: attr_val, icon: attr_key } } }, tableInsert: function ( arr, val ) { arr.push( val ) } };