Files
fc/dev/project/assets/Scripts/util/utils.js
T
2026-05-23 22:10:14 +08:00

944 lines
34 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 连接tablearray
// @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( "<color=%s>%s</color>", 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 <color=%s>%s</c>", time_title, time_color, TimeTool.getTimeForFunction( time ) )
} else {
label.node.stopAllActions();
label.string = cc.js.formatStr( "%s <color=%s>00:00:00</c>", 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 )
}
};