CocosCreator|cocoscreator常用代码抄录

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 = https://www.it610.com/article/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 = thistestFucCall: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
【CocosCreator|cocoscreator常用代码抄录】//类型: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)

    推荐阅读