绝对不会失败的微信py圈排行榜制作

如何减少子域大小!!
在项目的项目设置里面的模块管理
把你不需要的模块全部去掉再打包 可以节省1m左右 主域子域同理


首先你要熟悉一下主域和子域(开放数据域)的概念
→传送门:https://developers.weixin.qq.com/minigame/dev/tutorial/open-ability/open-data.html
这两个东西的大致作用应该就是你不能把微信数据库拿到的数据放到你自己的数据库

实践操作:
第一步:主域部分
1.你需要在主域设置一个按钮 来绑定接下来的onclick事件
2.然后在按钮的上方设置一片纯色精灵的节点
用来显示你的子域 就像这样

3.然后随便创建一个空节点WXsocial 然后创建一个脚本wxsocial绑定到这个节点上
(为了在继续开发游戏的时候不会报错 直接把wxsocail的active设置成False就行 或者把节点的勾去掉)
内容如下
cc.Class({
extends: cc.Component,

properties: {
    _controller: null,

    display: cc.Sprite
},
init(controller) {
    this._controller = controller;
    cc.log('init!');
},
start() {
    this._isShow = false;
    this.tex = new cc.Texture2D();
},
onClick() {
    this._isShow = !this._isShow;
    // 发消息给子域
    wx.postMessage({
        message: this._isShow ? 'Show' : 'Hide'
    })
},

_updaetSubDomainCanvas() {
    if (!this.tex) {
        return;
    }
    this.tex.initWithElement(sharedCanvas);
    this.tex.handleLoadedTexture();
    this.display.spriteFrame = new cc.SpriteFrame(this.tex);
},
update() {
    this._updaetSubDomainCanvas();
}

});
4.绑定按钮事件onclick
5.然后把纯色节点拖到WXsocial的Display上面
6.然后主域部分可以构建打包了,记得写上子域的名字

第二步:子域部分 (后有源文件)
1.创建一个子域的项目
2.按你的需求制作排行榜页面

就像这样
3.创建一个脚本挂到canvas上 脚本内容如下
cc.Class({
extends: cc.Component,

properties: {
    display: cc.Node,
},

start() {
    wx.onMessage(data => {
        switch (data.message) {
            case 'Show':
                this._show();
                break;
            case 'Hide':
                this._hide();
                break;
        }
    });
},

_show() {
    let moveTo = cc.moveTo(0.5, 0, 0);
    this.display.runAction(moveTo);
    console.log('i show');
    var kvDataList = new Array();
    kvDataList.push({
        key: "score",
        value: "111"
    });
    wx.setUserCloudStorage({
        KVDataList: kvDataList
    })

    wx.getFriendCloudStorage({
        keyList: ['score'],
        success: function (res) {
            console.log(res);
       //TODO:进行数据绑定更新
        }
    });
},
_hide() {
    let moveTo = cc.moveTo(0.5, 0, 1000);
    this.display.runAction(moveTo);
},

});
数据绑定就自己去写吧
4.打包发布 勾选打包成子域
给神兽铛的链接:https://pan.baidu.com/s/1CVFZ6FMXgwOVlQumgn5GgA

第三步:接入子域
参考http://docs.cocos.com/creator/manual/zh/publish/publish-wechatgame-sub-domain.html
就是把你打包的子域的文件夹放到主域的文件夹之下

然后用微信开发者工具打开你构建好的子域

数据输出

5赞

虽然看了很多类似排行榜的制作,但是按着这套方案去做的话子域包也不小了,有能力的建议还是上微信小游戏的写法吧。

1赞

请问一下楼主~可以在新加载的场景中渲染开放数据域吗?我想把排行榜做成一个单独的场景,比较方便代码管理。但是这样做每次都报错。。

0-0确实是 一看大小1.7M

给我看看报的什么错

原则上是很小的小游戏都是单场景,因为切换场景太卡了。。建议你在canvas下建很多个page,然后建立一个pagescontroller通过控制page的active, 来代替切换场景

汗,我刚好把那个测试场景给删了。。大概就是 不能修改一个只读的canvas之类的。。我已经放弃多场景了。。

revert回去看了下。是这个报错
[GameSubContext] Cannot assign to read only canvas.

也出了这个错,如何解?

[GameSubContext] Cannot assign to read only canvas.