1. 程式人生 > >【微信小遊戲】排行榜實戰版

【微信小遊戲】排行榜實戰版

-m ssa href ubd prope inpu pro 關閉按鈕 語言

一、前提

微信小遊戲主打社交玩法,為了豐富社交玩法我們肯定會用到關系鏈數據來做好友排行幫,群排行榜等功能。本篇主要介紹Cocos Creator中排行榜的實現,上一篇微信小遊戲排行版概念篇。

二、準備

工具:cocos creator

版本:v1.9.1

語言:JavaScript

介紹:

1)cocos creator v1.9.1 版本,構建發布中增加了子域的概念,這裏的子域對應的就是小遊戲中的開放數據域。如圖1

2)子域代碼目錄:指的就是小遊戲game.jsonsubContext的路徑,一般在主域的根路徑下,如圖3,這時此框填寫子域遊戲名opendata即可

3)小遊戲子域工程:如果選中了此復選框,則說明此工程作為子域工程,如圖2。

技術分享圖片

圖1(上圖)

技術分享圖片

圖2(上圖)

技術分享圖片

圖3(上圖)

註意點:如果擔心有兩個引擎文件,代碼文件會大很多,此時可以考慮,去掉不用的模塊。

三、實戰

1、新建wx-main-test項目,display是個sprite用於顯示排行,New Button是查看排行榜按鈕, 如下圖:

技術分享圖片

2、給場景綁定腳本lanuch.js, 給按鈕綁定事件,不做過多解釋,lanuch.js代碼如下

cc.Class({
    extends: cc.Component,

    properties: {
        display: cc.Sprite
    },

    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(); } });

解釋:

onClick():查看排行榜,按鈕點擊事件,主要是通過wx.posMessage發送消息到子域,子域監聽消息來獲取數據

updata():通過一個定時器來獲取sharedCanvas內容,就是上篇介紹的離屏畫布

3、新建wx-sub-test,如圖

技術分享圖片

4、lanuch.js代碼如下:

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, 73);
        this.display.runAction(moveTo);
    },

    _hide () {
        let moveTo = cc.moveTo(0.5, 0, 1000);
        this.display.runAction(moveTo);
    }
});

解釋:

1、關鍵代碼,start中的 wx.onMessage監聽主域消息

2、這是一個實例工程,咱們自己可以通過調用wx.getFriendCloudStorage獲取好友數據,進行渲染,實現排行榜。

四、總結

1、先發布主域工程,再發布子域工程,每次主域有修改都要重新發布子域如果只修改子域,可只發布子域。

2、如果發現子域渲染到主域上很小,多半是主域sprite大小適配設置的問題。

3、穿透問題,如果發現子域有穿透問題,則需要再主域加 Block Input Events

4、主域加了防穿透後,發現子域隱藏後,屏幕不可點擊了。是由於主域的sprite並沒有真正的隱藏。正確的做法是排行榜的關閉按鈕做在主域上,點擊隱藏主域內容,同時發送消息到子域,隱藏子域內容。

5、時刻明確一點,子域是不可能修改主域內容的。

6、如有更多問題,歡迎留言,加QQ群交流。QQ群:418177552

【微信小遊戲】排行榜實戰版