zoukankan      html  css  js  c++  java
  • coocsCreator杂记

    判断是否继承

    cc.isChildClassOf = function (subclass, superclass) {

    获取所有super classes

    CCClass.getInheritanceChain = function (klass) 

    cc.js下有很多判断方法

    判断是否是数字

    cc.js.isNumber

    字符串

    cc.js.isString
    copy all properties from arguments[1...n] to obj
    cc.js.mixin

     阻止事件向下层传递

    event.stopPropagation();停止事件冒泡。

     对node执行scheduleUpdate方法

    var node = new cc.Node();
    node.parent = this.node;
    node.update = function (dt){
            }.bind(this);
            cc.director.getScheduler().scheduleUpdate(node, 0, false);

    注意webGL 的 cc.director.getScheduler().scheduleUpdate的第4个参数可以传递function ,但在canvas中第四个参数无效

    继承自cc.Asset的类

    cc.TextAsset
    cc.AnimationClip
    cc.Font
    cc.Prefab
    cc.SceneAsset
    cc.Script
    cc.SpriteAtlas
    cc.TiledMapAsset
    dragonBones.DragonBonesAsset
    dragonBones.DragonBonesAtlasAsset
    sp.SkeletonData
    cc.SpriteFrame

    cc.loader.getRes  加载Sprite:如果加载过(cc.loader.loadResArr      cc.loader.loadResDir   cc.loader.loadRes等方法)此素材,可以正常读取     cc.SpriteFrame,否则会返回空

     cc.loader.loadResArray(["imgage/common/btn_common_close1.png"], cc.SpriteFrame, function () {//第一次加载(异步)
           var asset = cc.loader.getRes("imgage/common/btn_common_close1.png", cc.SpriteFrame);//第二次可以用getRes加载(同步) 
           if  (asset) {
            var node = new cc.Node();
                var spr = node.addComponent(cc.Sprite);
                spr.spriteFrame = asset;
           node.parent = this.node; 
           node.setPosition(0, 0); 
           }
    }.bind(this));            

    如果想第一次用同步方法加载:

    var node = new cc.Node();
    var component = node.addComponent(cc.Sprite);
    component.spriteFrame = new cc.SpriteFrame(cc.url.raw("resources/imgage/common/btn_common_close1.png")); 
    node.parent = this.node;
    node.setPosition(0, 0);

    bitmapFont  Label可以直接使用cc.loader.getRes加载,而不必担心是否加载过

     var asset = cc.loader.getRes(url, cc.Font);
     if (asset) {
          var node = new cc.Node();
          var component = node.addComponent(cc.Label);
          component.font = asset;
     }

     但是ttf 字体的cc.Font 只有使用cc.loader.loadRes(cc.loader.load    loadResArray   loadResDir等方法加载无效)异步加载过一次后,才能使用getRes方法直接加载

    cc.AudioClip可以直接使用cc.loader.getRes同步加载

    var asset = this.getRes("sound/audio_test", cc.AudioClip);
            if (asset) {
                var node = new cc.Node();
                node.parent = this.node;
                var component = node.addComponent(cc.AudioSource);
                component.clip = asset;
                component.play();
            }

    或者

      var node = new cc.Node();
            node.parent = rootNode;
            var component = node.addComponent(cc.AudioSource);
            component.clip = cc.url.raw("resources/sound/audio_test.mp3");
            component.play();

    游戏增量更新后需要重新加载 cc.game.restart(); 

    cocosCreator 支持es6新方法

    1 方法的不定数量传参:

      

    var func = function(arg1, ...argsArr) {
        console.log("arg1:" + arg1);
        for (var i = 0, len = argsArr.length; i < len; i ++) {
                console.log("args " + i + ": " + argsArr[i]);
        }
    };
    func(1, "haha", 42, 54);

    结果:

    arg1:1
    args 0: haha
    args 1: 42
    args 2: 54

    2 解构赋值

    var func = function() {
        return [1, 2];
    }
    var a = null;
    var b = null;
    [a, b] = func();
    console.log("a:" + a);
    console.log("b:" + b);

    a 、b被分别赋值 1、 2,可以用更少的代码,实现函数返回值赋值多个变量

    3 map和set的数据结构

    var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
    m.get('Michael'); // 95

      map初始化

    var m = new Map(); // 空Map
    m.set('Adam', 67); // 添加新的key-value
    m.set('Bob', 59);
    m.has('Adam'); // 是否存在key 'Adam': true
    m.get('Adam'); // 67
    m.delete('Adam'); // 删除key 'Adam'
    m.get('Adam'); // undefined

      set

    var s1 = new Set(); // 空Set
    var s2 = new Set([1, 2, 3]); // 含1, 2, 3

      添加元素

    >>> s.add(4)
    >>> s
    {1, 2, 3, 4}
    >>> s.add(4)
    >>> s
    {1, 2, 3, 4}
    for (let i of s.values()) {
      console.log(i);
    }
    let arr = [...s];
    console.log(JSON.stringify(arr));
    >>>[1, 2, 3, 4]
    还有 delete() clear() forEach() keys() values() size 等方法

     set 交集并集计算

    let set1 = new Set([1,2,3,4,5,6]);
            let set2 = new Set([4,5,6,7,8,9]);
    
    //并集
            let union = new Set([...set1,...set2]);
            console.log("union:" + JSON.stringify([...union]));
    //[1,2,3,4,5,6,7,8,9]
    //交集
            let intersect = new Set([...set1].filter(x => set2.has(x)));
            console.log("intersect:" + JSON.stringify([...intersect]));
    //[4,5,6]
    //差集
            let diffsect = new Set([...set1].filter(x => !set2.has(x)));
            console.log("diffsect:" + JSON.stringify([...diffsect]));
    //[1,2,3]

     4promise 

    var promise1 = new Promise(function (resolve, reject) {
                GameCtr.resCtr.getSpriteAsyn(Res.sheep_plist, function (asset) {
                    if (asset) {
                        resolve(asset);
                    }
                }, "sheep_run_0");
            });
            var promise2 = new Promise(function (resolve, reject) {
                GameCtr.resCtr.getSpriteAsyn(Res.sheep_plist, function (asset) {
                    if (asset) {
                        resolve(asset);
                    }
                }, "sheep_run_0");
            });
            Promise.all([promise1, promise2]).then(function (assets) {
                for (var i = 0, len = assets.length; i < len; i ++) {
                    let asset = assets[i];
                    asset.position = cc.p(300, i * 100);
                    asset.parent = this.node;
                    var atlas = asset['Atlas'];
                    var spr = asset.getComponent(cc.Sprite);
                    spr.spriteFrame = atlas.getSpriteFrames()[0];
                }
            }.bind(this));

    5 proxey

    如果节点不存在自动生成节点的Tree

     function Tree() {
                return new Proxy({}, handler);
            }
            var handler = {
                get: function (target, key, receiver) {
                    if (!(key in target)) {
                        target[key] = Tree();  // 自动创建一个子树
                    }
                    return Reflect.get(target, key, receiver);
                }
            };
            var tree = Tree();
            //tree.a.b.c ="1";
            console.log(tree.a.b.c);

    扩展已有方法

    this.testFunc = function(key) {
            console.log(`testFunc1 ${key}`);
    };
    var obj = new Proxy(this, {
                get(target, key, proxy) {
                    return function(...args) {
                        console.log(`testFunc2 ${args[0]}`);
                        return Reflect.apply(target[key], target, args);
                    }
                }
            });
            obj.testFunc("123");
    
    >>>testFunc2 123
    >>>testFunc1 123

    revocable proxy

    this. testProxyFunc = function (key) {
            console.log(`testProxyFunc 2 ${key}`);
        };
    var handler = {
                get(target, key, proxy) {
                    return function(...args) {
                        console.log(`testProxyFunc 1 ${args[0]}`);
                        return Reflect.apply(target[key], target, args);
                    }
                }
            };
            var revocable = Proxy.revocable(this, handler);
            var proxy = revocable.proxy;
            proxy.testProxyFunc("123");
            revocable.revoke();
            console.log("-------");
            proxy.testProxyFunc("123");
    
    >>>testProxyFunc 1 123
    >>>testProxyFunc 2 123
    >>>-------
    Uncaught TypeError: Cannot perform 'get' on a proxy that has been revoked

    6 class module

        

  • 相关阅读:
    Maven基本操作命令
    Android studio安装与配置
    java数据结构----图
    java数据结构----堆
    java数据结构----哈希表
    java数据结构----树
    java数据结构----链表
    java数据结构----队列,优先级队列
    java数据结构----栈
    java数据结构----数组篇
  • 原文地址:https://www.cnblogs.com/pengyingh/p/6708298.html
Copyright © 2011-2022 走看看