1、JS之Math的常用方法总结
Math.abs(num) : 返回num的绝对值
Math.acos(num) : 返回num的反余弦值
Math.asin(num) : 返回num的反正弦值
Math.atan(num) : 返回num的反正切值
Math.atan2(y,x) : 返回y除以x的商的反正切值
Math.ceil(num) : 返回大于num的最小整数
Math.cos(num) : 返回num的余弦值
Math.exp(x) : 返回以自然数为底,x次幂的数
Math.floor(num) : 返回小于num的最大整数
Math.log(num) : 返回num的自然对数
Math.max(num1,num2) : 返回num1和num2中较大的一个
Math.min(num1,num2) : 返回num1和num2中较小的一个
Math.pow(x,y) : 返回x的y次方的值
Math.random() : 返回0到1之间的一个随机数
Math.round(num) : 返回num四舍五入后的值
Math.sin(num) : 返回num的正弦值
Math.sqrt(num) : 返回num的平方根
Math.tan(num) : 返回num的正切值
Math.E : 自然数(2.718281828459045)
Math.LN2 : 2的自然对数(0.6931471805599453)
Math.LN10 : 10的自然对数(2.302585092994046)
Math.LOG2E : log 2 为底的自然数(1.4426950408889634)
Math.LOG10E : log 10 为底的自然数(0.4342944819032518)
Math.PI : π(3.141592653589793)
Math.SQRT1_2 : 1/2的平方根(0.7071067811865476)
Math.SQRT2 : 2的平方根(1.4142135623730951)
弧度 = 角度 * Math.PI / 180;
角度 = 弧度 * 180 / Math.PI;
2、世界坐标和节点坐标转换
//把cocos1的坐标转成世界坐标pos1 (只能父节点转)
var pos1 = this.cocos1.parent.convertToWorldSpaceAR(this.cocos1.getPosition());
cc.log(pos1)
//把(世界坐标pos1)转成相对于节点cocos1的坐标
var pos2 = this.cocos1.convertToNodeSpaceAR(pos1);
cc.log(pos2)
3、js中获取时间new date()的用法
var myDate = new Date();//获取系统当前时间
myDate.getYear(); //获取当前年份(2位)
myDate.getFullYear(); //获取完整的年份(4位,1970-????)
myDate.getMonth(); //获取当前月份(0-11,0代表1月)
myDate.getDate(); //获取当前日(1-31)
myDate.getDay(); //获取当前星期X(0-6,0代表星期天)
myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数)
myDate.getHours(); //获取当前小时数(0-23)
myDate.getMinutes(); //获取当前分钟数(0-59)
myDate.getSeconds(); //获取当前秒数(0-59)
myDate.getMilliseconds(); //获取当前毫秒数(0-999)
myDate.toLocaleDateString(); //获取当前日期
myDate.toLocaleTimeString(); //获取当前时间
myDate.toLocaleString( ); //获取日期与时间
//i_haoMiao为毫秒数
getTime:function(i_haoMiao){
i_haoMiao = i_haoMiao /1000
var str_time = '1分钟前'
if(Math.floor(i_haoMiao / 60 / 60 / 24 / 30 / 12) > 0){
str_time = Math.floor(i_haoMiao / 60 / 60 / 24 / 30 / 12) + '年前'
}else if(Math.floor(i_haoMiao / 60 / 60 / 24 / 30 ) > 0){
str_time = Math.floor(i_haoMiao / 60 / 60 / 24 / 30 ) + '月前'
}else if(Math.floor(i_haoMiao / 60 / 60 / 24 ) > 0){
str_time = Math.floor(i_haoMiao / 60 / 60 / 24 ) + '天前'
}else if(Math.floor(i_haoMiao / 60 / 60 ) > 0){
str_time = Math.floor(i_haoMiao / 60 / 60 ) + '小时前'
}else if(Math.floor(i_haoMiao / 60 ) > 0){
str_time = Math.floor(i_haoMiao / 60 ) + '分钟前'
}
return str_time
}
4、通过两点算出角度的方法
getAngle:function(start,end){
var x = end.x - start.x
var y = end.y - start.y
var hypotenuse = Math.sqrt(x*x + y*y)
var cos = x / hypotenuse
var radian = Math.acos(cos)
//求出弧度
var angle = 180 / (Math.PI / radian)
//用弧度算出角度
if(y < 0){
angle = 0-angle
}else if(y == 0 && x < 0){
angle = 180
}
return 90-angle
},
5、求圆周上等分点的坐标
/*
* 求圆周上等分点的坐标
* ox,oy为圆心坐标
* r为半径
* count为等分个数
*/
getPoint:function(r, ox, oy, count){
var point = []; //结果
var radians = (Math.PI / 180) * Math.round(360 / count), //弧度
i = 0;
for(; i < count; i++){
var x = ox + r * Math.sin(radians * i),
y = oy + r * Math.cos(radians * i);
point.unshift({x:x,y:y}); //为保持数据顺时针
}
return point
},
6、数组常用方法
//声明一维数组
var arr_1 = []
//声明二维数组
var arr_2 = []
for(let i = 0; i < 6; i++){
arr_2[i] = []
}
//*************************************************************************************************//
//判断某一元素是否在数组中
//方法一:indexOf()方法返回给定元素能找在数组中找到的第一个索引值,否则返回-1
var a=["1", "3", "2", "3", "0"];
cc.log(a.indexOf ('3'));//1
cc.log(a.indexOf ('5'));//-1
//方法二:
var arr = [1,2,3];
arr.includes(1) //true
arr.includes(5) //false
//*************************************************************************************************//
//删除数组中的指定元素
/*
*arr:数组
*val:指定元素
*/
removeByValue(arr, val) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] == val) {
arr.splice(i, 1);
break;
}
}
},
//*************************************************************************************************//
//数组转换字符串
//方法一: toString() 方法能够把每个元素转换为字符串,然后以逗号连接输出显示。
var a = [1,2,3,4,5,6,7,8,9,0]; //定义数组
var s = a.toString(); //把数组转换为字符串
cc.log(s); //返回字符串“1,2,3,4,5,6,7,8,9,0”
var a = [1,[2,3],[4,5]],[6,[7,[8,9],0]]]; //定义多维数组
var s = a.toString(); //把数组转换为字符串
cc.log(S); //返回字符串“1,2,3,4,5,6,7,8,9,0”
//方法二:join()方法,可以传递一个参数作为分隔符来连接每个元素。如果省略参数,默认使用逗号作为分隔符。
var a = [1,2,3,4,5]; //定义数组
var s = a.join("=="); //指定分隔符
cc.log(s); //返回字符串“1==2==3==4==5”
7、动态加载网络图片的方法
/**
* 动态加载图片的方法
* @param {*} container 为cc.Sprite类型的节点
* @param {*} url_ 图片的链接
*/
loadImg:function(container,url_)
{
if (!url_ || !container || !container.spriteFrame) { return; }
var tempUrl = url_
//cc.loader.load({url:tempUrl,type:'jpg'}, function (err, texture) {
cc.loader.load(tempUrl, function (err, texture) {
if (texture)
{
var sprite = new cc.SpriteFrame(texture);
if (container && container.spriteFrame && sprite)
{
container.spriteFrame = sprite;
}
}
});
},
//如何使用
this.loadImg(this.head,'https://cdn.pinduoduo.com/home/static/img/common/pdd_logo_v2.png')
var self = this
var url_img = 'https://cdn.pinduoduo.com/home/static/img/common/pdd_logo_v2.png'
cc.loader.load(url_img,function(err,tex){
var view = self.node_zhiFuBao.getComponent(cc.Sprite)
view.spriteFrame = new cc.SpriteFrame(tex);
});
8、动态加载音效
/**
* 动态播放音效
* sounds/chat/1.mp3的路径必须要在resources文件夹下
*/
playSound:function(){
cc.audioEngine.stopAllEffects()
cc.loader.loadRes("sounds/chat/1.mp3", function (err, audioClip) {
cc.audioEngine.play(audioClip, false, 1)
});
},
9、JS调Android的方法
//JS代码部分
/**
* AppActivity:Android的类文件
* exitGame:类里面的方法名
* ()V:传参为空
*(Ljava/lang/String;)V:传String类型的参数
*(Ljava/lang/String;II)V:传三个参数,分别为String类型、int类型、int类型
*/
if (cc.sys.os == cc.sys.OS_ANDROID) {
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "exitGame", "()V");
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "copy", "(Ljava/lang/String;)V" ,'什么鬼?');
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "DLShareIMG", "(Ljava/lang/String;II)V", 'filePath', 5, 6);
}
//Android代码部分
/**
*Android退出游戏
*/
public static void exitGame()
{
android.os.Process.killProcess(android.os.Process.myPid());
}
/**
*复制一段话到Android手机的剪切板上
*/
public static void copy(final String text)
{
app.runOnUiThread(new Runnable() {
@Override
public void run() {
ClipboardManager cm = (ClipboardManager) app.getSystemService(Context.CLIPBOARD_SERVICE);
//ClipData mClipData = ClipData.newPlainText("Label", text);
//cm.setPrimaryClip(mClipData);
cm.setText(text);
}
});
}
/**
*传三个参数,分别为String类型、int类型、int类型
*/
public static void DLShareIMG(String path,int width,int height) {
}
/**
*在Android中生成一个layout
*/
RelativeLayout adLayout = new RelativeLayout(this);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
addContentView(adLayout, layoutParams);
FrameLayout bannerContainer = new FrameLayout(this);
RelativeLayout.LayoutParams bannerParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
bannerParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
adLayout.addView(bannerContainer, bannerParams);
10、Android调JS的方法
//Android代码部分
/**
*cc.xiaobai.anySDKMgr:JS里全局的类
*testFucCall(\"%s\"):这个类里面一个方法,方法里需要传String类型的参数
*/
public static void callJsFunction(final String value) {
final String jsCallStr = String.format("cc.xiaobai.game.testFucCall(\"%s\");", value);
app.runOnGLThread(new Runnable() {
@Override
public void run() {
Cocos2dxJavascriptJavaBridge.evalString(jsCallStr);//直接调用到js里面
}
});
}
//JS代码部分
if(cc.xiaobai == null){
cc.xiaobai = {}
}
cc.xiaobai.game = this
testFucCall:function(str){
},
11、判断是否是手机号
/**
* 1--以1为开头
* 2--第二位可为3,4,5,7,8,中的任意一位
* 3--最后以0-9的9个整数结尾
* @param {String类型的手机号} phone
*/
isPoneAvailable: function (phone) {
var myreg = /^[1][3,4,5,7,8][0-9]{9}$/;
if (!myreg.test(phone)) {
return false;
} else {
return true;
}
},
12、打开网址
cc.sys.openURL("http://www.baidu.com")
13、进度条
//类型:cc.ProgressBar
//进度条属性:progress 当前进度值,该数值的区间是 0-1 之间
14、预制体
//类型:cc.Prefab
var node = cc.instantiate(this.prefabNode);
node.parent = this.node
15、音效音乐
//类型:cc.AudioClip
//api链接:https://docs.cocos.com/creator/api/zh/classes/audioEngine.html?h=audioengine
this.current = cc.audioEngine.play(this.audio, false, 1);
cc.audioEngine.stop(this.current);
16、切换场景
cc.director.loadScene("MyScene")
17、骨骼动画
//api链接:https://docs.cocos.com/creator/api/zh/classes/Skeleton.html#loop
//类型:sp.Skeleton
this.ske_anim.clearTracks()//清空所有播放管道动画
this.ske_anim.clearTrack(0)//清空指定索引管道动画
this.ske_anim.setAnimation(0,'animation_1',false)//清空管道动画,播放animation_1动画
this.ske_anim.addAnimation(0,'animation_1',false)//将animation_1动画添加到管道里,依次播放
18、粒子系统
//类型:cc.ParticleSystem
this.particle.stopSystem();//停止播放
this.particle.resetSystem();//重新启用
19、字符串
//带运算符的字符串类型转换成可计算的
var str_jiSuan = '1.0+5*2'
try{
cc.log(eval(str_jiSuan)) //输出为11
}catch(exception){
cc.log(exception.toString())
}
//字符串转整型数字
var str_num = '123'
var i_num = parseInt(str_num)
//字符串转浮点型数字
var str_num = '123.4'
var f_num = parseFloat(str_num)
//判断字符串是否包含另一个字符串
var str_test = "this is a test"
if(str_test.indexOf("test") != -1){//不等于-1表示该字符串包含子字符串。
cc.log('包含该字符串')
}
var str_test = "this is a test"
if(str_test.includes('test')){//返回布尔值,表示是否找到了参数字符串。
cc.log('包含该字符串')
}
var str_test = "this is a test"
if(str_test.startsWith('this')){//返回布尔值,表示参数字符串是否在源字符串的头部。
cc.log('this是该字符串的头部')
}
var str_test = "this is a test"
if(str_test.endsWith('test')){//返回布尔值,表示参数字符串是否在源字符串的尾部。
cc.log('test是该字符串的尾部')
}
20、动作缓冲
var act_1 = cc.moveTo(2,cc.v2(100,100))).easing(cc.easeCubicActionOut())//越来越慢
var act_1 = cc.moveTo(2,cc.v2(100,100))).easing(cc.easeCubicActionIn())//越来越块
21、rect
//rect是否包含某一点pos
rect.contains(pos)