Loading... ## 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; ``` ## 世界坐标和节点坐标转换 ``` //把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) ``` ## 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 } ``` ## 通过两点算出角度的方法 ``` 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 } ``` ## 求圆周上等分点的坐标 ``` /* * 求圆周上等分点的坐标 * 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 } ``` ## 数组常用方法 ``` // 声明一维数组 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” ``` ## 动态加载网络图片的方法 ``` /** * 动态加载图片的方法 * @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); }); ``` ## 动态加载音效 ``` /** * 动态播放音效 * 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) }); } ``` ## JS调Android的方法 ```javascript //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); } ``` ```java //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); ``` ## Android调JS的方法 ```java //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里面 } }); } ``` ```javascript //JS代码部分 if(cc.xiaobai == null){ cc.xiaobai = {} } cc.xiaobai.game = this testFucCall:function(str){ } ``` ## 判断是否是手机号 ```javascript /** * 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; } } ``` ## 打开网址 ``` cc.sys.openURL("http://www.baidu.com") ``` ## 进度条 ``` //类型:cc.ProgressBar //进度条属性:progress 当前进度值,该数值的区间是 0-1 之间 ``` ## 预制体 ``` //类型:cc.Prefab var node = cc.instantiate(this.prefabNode); node.parent = this.node ``` ## 音效音乐 ``` //类型: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); ``` ## 切换场景 ``` cc.director.loadScene("MyScene") ``` ### 骨骼动画 ``` //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动画添加到管道里,依次播放 ``` ## 粒子系统 ``` //类型:cc.ParticleSystem this.particle.stopSystem();//停止播放 this.particle.resetSystem();//重新启用 ``` ## 字符串 ```javascript //带运算符的字符串类型转换成可计算的 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是该字符串的尾部') } ``` ## 动作缓冲 ``` 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())//越来越块 ``` ## rect ``` //rect是否包含某一点pos rect.contains(pos) ``` > 转载至: [有道云笔记 (youdao.com)](https://note.youdao.com/ynoteshare1/index.html?id=0e2ffe2e32414c6a5b7fd792c8c246d6&type=note) > > 版权所属: ©小白程序猿001 最后修改:2021 年 12 月 30 日 © 允许规范转载 赞 都滑到这里了,不点赞再走!?