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 = 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)

 

猜你喜欢

转载自blog.csdn.net/shark_pang/article/details/124859170