贡献一个自主实现的纯原生微信排行榜实现方案, 使用简单且性能叼爆

战略性mark

战略性mark

战略性mark

看着效果不错哦!

强大,战略性mark。

请问如何控制自定义图片的层级

战略性mark

楼主,找不到Wx编译报错,怎么import Wx进来?如果有一个完整的运行demo就好了~

mark
mark

Wx.getShareCanvas();
Wx.isWeChatEnv();
Wx.sendMsgToContext();
建议补充一下SubContextView里面的这三个方法,不然用不了

2赞

mark

mark+1

mark

mark

补充Wx 类的依赖 API:

// @ts-ignore
export const wx: any = window.wx || false;

export default class Wx {
public static isWeChatEnv(): boolean {
return !!wx;
}
// 上传微信子域排行数据,可直接在主域中使用.
public static updateUserData(key: string, data: any, sortKey?: string): Promise {
if (!Wx.isWeChatEnv()) {
return Promise.resolve();
}
if (!key || !data) {
return;
}
return new Promise((resolve, reject) => {
data.uuid = “” + Math.random();

        // 增加时间戳,用来进行排行数据过滤.
        data.timestamp = cc.sys.now();
        // 增加小游戏中心排行显示.
        if (sortKey) {
            data.wxgame = {score: data[sortKey], update_time: data.timestamp}
        }
        wx.setUserCloudStorage({
            KVDataList: [{
                key: key,
                value: JSON.stringify(data)
            }],
            success: function (args) {
                cc.log("上传排行榜成功.", args);
                resolve(args);
            },
            fail: function (args) {
                cc.log("上传排行榜失败.", args);
                reject(args);
            }
        })
    })
}
// 删除微信子域数据.
public static removeUserData(...keys: string[]) {
    if (!Wx.isWeChatEnv()) {
        return
    }
    wx.removeUserCloudStorage({
        keyList: keys,
        success() {
            cc.log("清除玩家数据成功.");
        },
        fail() {
            cc.log("清除玩家数据失败.", keys);
        }
    })
}
public static getShareContext(): any {
    if (!Wx.isWeChatEnv()) {
        return null
    }
    const context = wx.getOpenDataContext();
    return context;
}
// 获取子域context.
public static getShareCanvas(): any {
    if (!Wx.isWeChatEnv()) {
        return null
    }
    const context = wx.getOpenDataContext();
    return context.canvas
}
// 清空子域绘制.
public static clearSubContext() {
    if (!Wx.isWeChatEnv()) {
        return;
    }
    const context = wx.getOpenDataContext();
    if (context) {
        context.width = cc.winSize.width;
        context.height = cc.winSize.height;
        cc.log("屏幕尺寸:", cc.winSize);
    }
}
// 向子域同步指令.
public static sendMsgToContext(what: number | string, args: any) {
    const context = this.getShareContext();
    if (context == null) {
        console.info("微信环境异常.无法调用context.");
        return
    }
    context.postMessage({what, arguments: args});
}
// 将子域内容绘制到sprite 上.
public static updateSubContextDrawable(subcontextView: cc.Sprite, texture?: cc.Texture2D): Promise<any> {
    return new Promise<any>((resolve, reject) => {
        subcontextView.spriteFrame = Wx.getSubContextDrawable(texture);
    })
}
// 获取子域drawable.
public static getSubContextDrawable(texture?: cc.Texture2D): cc.SpriteFrame {
    let canvas = this.getShareCanvas();
    if (canvas) {
        let texture2 = texture;
        if (!texture) {
            texture2 = this.texture;
        }
        texture2.initWithElement(canvas);
        texture2.handleLoadedTexture();
        return new cc.SpriteFrame(texture2)
    }
}
public static clearUserCloudStorage(keys: string[]) {
    if (Wx.isWeChatEnv()) {
        wx.removeUserCloudStorage({
            keyList: keys || [],
            success(res) {
                console.warn("已成功清除微信托管数据", res)
            }
        })
    }
}
private static texture: cc.Texture2D = new cc.Texture2D();

}

1赞

mark,这个好

mark

score对应的值是string类型的吗?update_time呢?

翻页的子域还是不如滚动的

楼主,来个demo可以吗,按照你的设置。。。显示不了排行榜啊