Cocos2d-JS开发中的一些小技巧(持续更新)

来源:互联网 发布:ubuntu vsftpd 端口 编辑:程序博客网 时间:2024/05/12 20:03

1、获取URL中的请求参数的值----此方法接收参数名

1
2
3
4
5
6
function getQueryString(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)""i");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return decodeURIComponent(r[2]);
    return null;
};


2、底图上添加文字---适用于按钮Sprite

1
2
3
4
5
6
7
8
9
10
var MyButtonSprite = cc.Sprite.extend({
    ctor: function (fileName, title, fontName, fontSize) {
        this._super(fileName);
  
        var titleLabel = new cc.LabelTTF(title, fontName, fontSize);
        this.addChild(titleLabel);
        titleLabel.x = this.getContentSize().width / 2;
        titleLabel.y = this.getContentSize().height / 2;
    }
});


3、远程图片加载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
loadImgFromUrl: function (target, imgUrl, p, tag) {
        if(!imgUrl)return;
        var self = target;
        var loadCb = function(err, img){
            cc.textureCache.addImage(imgUrl);
            var texture2d = new cc.Texture2D();
            texture2d.initWithElement(img);
            texture2d.handleLoadedTexture();
            var sp = new cc.Sprite();
            sp.initWithTexture(texture2d);
            self.addChild(sp);
            sp.x = p.x;
            sp.y = p.y;
            sp.tag = tag;
        };
        cc.loader.loadImg(imgUrl, {isCrossOrigin : false }, loadCb);
    },


4、XMLHttpRequest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var sendRequest = function(url, params, isPost, callback, errorcallback){
    if(url == null || url == '')
        return;
          
    var xhr = cc.loader.getXMLHttpRequest();
    if(isPost){
        xhr.open("POST",url);
    }else{
        xhr.open("GET",url);
    }
    xhr.setRequestHeader("Content-Type""application/x-www-form-urlencoded");
    xhr.onreadystatechange = function () {
        if(xhr.readyState == 4 && xhr.status == 200){
            var response = xhr.responseText;
            if(callback)
                callback(response);
        }else if(xhr.readyState == 4 && xhr.status != 200){
            var response = xhr.responseText;
            if(errorcallback)
                errorcallback(response);
        }
    };
  
    if(params == null || params == ""){
        xhr.send();
    }else{
        xhr.send(params);
    }
};


5、JSON解析以及上述第4条的回调方法

1
2
3
4
5
6
7
8
var callback = function (response) {
        var jsonData = JSON.parse(response);
        var data = jsonData["users"];
        if(data){
            alert(data["name"]);
            // todo something
        }
    };


6、自定义Loading界面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
var MyLoaderScene = cc.Scene.extend({
    _interval : null,
    _length : 0,
    _count : 0,
    _label : null,
    _className:"MyLoaderScene",
    init : function(){
        var self = this;
  
        // bg
        var bgLayer = self._bgLayer = cc.LayerColor.create(cc.color(32, 32, 32, 255));
        bgLayer.setPosition(cc.visibleRect.bottomLeft);
        self.addChild(bgLayer, 0);
  
        //loading percent
        var label = self._label = cc.LabelTTF.create("玩命加载中... 0%""Arial", 24);
        label.setPosition(cc.pAdd(cc.visibleRect.center, cc.p(0, 0)));
        label.setColor(cc.color(180, 180, 180));
        bgLayer.addChild(this._label, 10);
        return true;
    },
  
    _initStage: function (img, centerPos) {
        var self = this;
        var texture2d = self._texture2d = new cc.Texture2D();
        texture2d.initWithElement(img);
        texture2d.handleLoadedTexture();
        var logo = self._logo = cc.Sprite.create(texture2d);
        logo.setScale(cc.contentScaleFactor());
        logo.x = centerPos.x;
        logo.y = centerPos.y;
        self._bgLayer.addChild(logo, 10);
    },
  
    onEnter: function () {
        var self = this;
        cc.Node.prototype.onEnter.call(self);
        self.schedule(self._startLoading, 0.3);
    },
  
    onExit: function () {
        cc.Node.prototype.onExit.call(this);
        var tmpStr = "玩命加载中... 0%";
        this._label.setString(tmpStr);
    },
  
    /**
     * init with resources
     * @param {Array} resources
     * @param {Function|String} cb
     */
    initWithResources: function (resources, cb) {
        if(typeof resources == "string") resources = [resources];
        this.resources = resources || [];
        this.cb = cb;
    },
  
    _startLoading: function () {
        var self = this;
        self.unschedule(self._startLoading);
        var res = self.resources;
        self._length = res.length;
        self._count = 0;
        cc.loader.load(res, function(result, count){ self._count = count; }, function(){
            if(self.cb)
                self.cb();
        });
        self.schedule(self._updatePercent);
    },
  
    _updatePercent: function () {
        var self = this;
        var count = self._count;
        var length = self._length;
        var percent = (count / length * 100) | 0;
        percent = Math.min(percent, 100);
        self._label.setString("玩命加载中... " + percent + "%");
        if(count >= length) self.unschedule(self._updatePercent);
    }
});
MyLoaderScene.preload = function(resources, cb){
    var _myLoaderScene = null;
    if(!_myLoaderScene) {
        _myLoaderScene = new MyLoaderScene();
        _myLoaderScene.init();
    }
    _myLoaderScene.initWithResources(resources, cb);
  
    cc.director.runScene(_myLoaderScene);
    return _myLoaderScene;
};


7、网页跳转

1
window.location.href = "http://www.baidu.com"


8、关于进入游戏时黑屏时间较长的处理方法

1)

1
<body style="padding:0; margin: 0; background: #000;">

删除index.html中<body>标签的样式background: #000;


2)按照自己需要添加编译模块 修改project.json如

1
"modules" : ["core""actions","shape-nodes""labels","menus","transitions","physics","chipmunk","gui"],


本文由CocoaChina会员happyfhc总结,欢迎大家学习与讨论。


来源网址:http://www.cocoachina.com/bbs/read.php?tid=226079

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝网密码忘记了怎么办 京东抢购不发货怎么办 微商不想做了怎么办 减肥过程中饿了怎么办 滴滴车龄超过6年怎么办 网络公选课没过怎么办 大学网络课挂了怎么办 淘宝虚拟订单买家恶意退款怎么办 淘宝卖家虚拟发货怎么办 淘宝买虚拟产品被骗了怎么办 哈尔滨暖气低于十八度怎么办 淘客店铺没人买怎么办 淘宝商家不给退货怎么办 淘宝卖家拒绝退款申请怎么办 运费险赔付少了怎么办 买了运费险退货怎么办 卖家运费险退货怎么办 京东生鲜有坏的怎么办 与上级意见不一致时你将怎么办 物金所倒闭投资怎么办 电商平台欺骗客户怎么办 pdf电脑打开是乱码怎么办 excel表格打开是乱码怎么办 win10安装软件出现乱码怎么办 华为手机速度越来越慢怎么办 oppo手机速度越来越慢怎么办 安卓手机速度越来越慢怎么办 青桔单车忘了锁怎么办 华为手机反应太慢了怎么办 魅族关机键失灵怎么办 oppa79手机开不开机怎么办 黑衣服洗完发白怎么办 白衣服被黑衣服染色了怎么办 评职称单位领导不推荐怎么办 支付宝被限制收款怎么办 在淘宝上下单想写两个地址怎么办 注销了的支付宝怎么办 狗狗黑色毛发红怎么办 蘑菇街直播间被禁言了怎么办 收了发票不付款怎么办 退款要先收发票怎么办