微信小游戲排行榜總結(jié)

這篇文章寫于218年下半年,基于cocos creator1.9開發(fā),現(xiàn)在已經(jīng)有更好的方式做排行榜了。

1.****子域的概念:

微信小游戲?yàn)榱吮Wo(hù)其社交關(guān)系鏈數(shù)據(jù),增加了子域的概念,子域又叫 開放數(shù)據(jù)域,是一個(gè)單獨(dú)的游戲執(zhí)行環(huán)境。子域中的資源、引擎、程序,都和主游戲完全隔離,開發(fā)者只有在子域中才能訪問微信提供的 wx.getFriendCloudStorage() 和 wx.getGroupCloudStorage() 兩個(gè) API,用于實(shí)現(xiàn)一些例如排行榜的功能。由于子域只能在離屏畫布 sharedCanvas 上渲染,因此需要我們把 sharedCanvas 繪制到主域上。

Cocos Creator 從 v1.9.1 版本開始支持打包到子域。

由于開放數(shù)據(jù)域是一個(gè)封閉、獨(dú)立的 JavaScript 作用域,所以開發(fā)者需要?jiǎng)?chuàng)建兩個(gè)項(xiàng)目:

主域項(xiàng)目工程(正常的游戲項(xiàng)目)

子域項(xiàng)目工程(通過微信 API 獲取用戶數(shù)據(jù)來做排行榜等功能的項(xiàng)目)

2.****工程的結(jié)構(gòu):

子域只保存了排行榜的滑動(dòng)列表,加載到主域的children_context上。而主域顯示排行榜的界面相關(guān)的內(nèi)容。

圖片1.png
圖片2.png

3.****主域和開放數(shù)據(jù)域的通信:

開放數(shù)據(jù)域不能向主域發(fā)送消息。

主域可以向開放數(shù)據(jù)域發(fā)送消息。調(diào)用 wx.getOpenDataContext() 方法可以獲取開放數(shù)據(jù)域?qū)嵗?,調(diào)用實(shí)例上的OpenDataContext.postMessage()方法可以向開放數(shù)據(jù)域發(fā)送消息。

// game.jslet openDataContext = wx.getOpenDataContext()

openDataContext.postMessage({

text: 'hello',

year: (new Date()).getFullYear()

})

在開放數(shù)據(jù)域中通過 wx.onMessage() 方法可以監(jiān)聽從主域發(fā)來的消息。

// src/myOpenDataContext/index.js

wx.onMessage(data => {

console.log(data)

/* {

text: 'hello',

year: 2018

} */

})

4.****數(shù)據(jù)上傳和拉取:

首先,在主域中,調(diào)用wx.setUserCloudStorage接口,把想上傳到微信的內(nèi)容通過KVDataList的格式儲(chǔ)存。

圖片3.png

然后在想要獲取的時(shí)候,調(diào)用wx.getFriendCloudStorage接口,注意的是,這個(gè)接口只能通過我寫在KVDataList中的key,拿到我微信好友中玩過這個(gè)游戲的玩家數(shù)據(jù),我們的排行榜就是通過這個(gè)接口來獲得數(shù)據(jù)的。

圖片4.png

最后說說群排行的做法,調(diào)用的是wx.getGroupCloudStorage接口,這個(gè)接口能拿到我分享的群消息,調(diào)用方式和上面如出一轍。

圖片5.png

5.****子域的發(fā)布:

打開主域項(xiàng)目,在 菜單欄 - 項(xiàng)目中打開構(gòu)建發(fā)布面板,選擇 Wechat Game 平臺(tái),填入 [子域代碼目錄],該目錄是子域構(gòu)建后所在的路徑,并且這個(gè)路徑需要放在主域構(gòu)建目錄下。然后點(diǎn)擊構(gòu)建。

圖片6.png

該步驟會(huì)幫用戶自動(dòng)配置到 game.json 中,用于辨別子域文件在主域發(fā)布包下的所在目錄。

圖片7.png

打開子域項(xiàng)目,打開構(gòu)建發(fā)布面板,選擇 Wechat Game 平臺(tái),渲染模式選擇 Canvas 模式或者自動(dòng)模式,并勾選 [小游戲子域工程],把當(dāng)前工程打包成子域可用的文件。

發(fā)布路徑 設(shè)置為主域中填入的 [子域代碼目錄] 相同路徑,即指定到主域項(xiàng)目工程的發(fā)布包目錄下。

圖片8.png

6.****分享介紹

微信分享分為三種:

微信小程序自帶的右上角菜單欄里面的分享功能

正常的主動(dòng)調(diào)用的分享

群分享

第一種右上角分享需要調(diào)用兩個(gè)接口,他們寫在主場(chǎng)景綁定的js代碼的onload之中:

圖片9.png
圖片10.png

第三種群分享也有個(gè)接口要寫在這,目的是開啟群分享:

圖片11.png

而一般分享和群分享的調(diào)用方式其實(shí)差不多,都是這個(gè)接口:

圖片12.png
圖片13.png

參考一段我們的代碼,success返回的內(nèi)容中如果有shareTickets表明就是群分享了。

上述代碼還包含了一個(gè)關(guān)鍵的群的唯一性判斷。微信給我們提供這么一個(gè)接口:

圖片14.png
圖片15.png

我們現(xiàn)在想做群的唯一性判斷只有通過這個(gè)接口獲取到encryptedData然后讓我們后端幫我們解析出來再把openGId返回給我們,再通過這個(gè)來對(duì)比。

分享還有個(gè)功能,可以讓被分享者通過這個(gè)打開游戲的時(shí)候獲得一個(gè)分享者提供的數(shù)據(jù),借由這個(gè)功能,我們可以制作邀請(qǐng)功能。


圖片16.png

目前,我在query這里傳入我自身的openid作為標(biāo)識(shí)符,然后,被分享者打開游戲的時(shí)候,通過wx.getLaunchInfoSync接口拿到,在登錄接口傳給服務(wù)器,讓數(shù)據(jù)庫(kù)記錄下這個(gè)玩家是通過我邀請(qǐng)的,來達(dá)到邀請(qǐng)玩家的功能。

圖片17.png

7.****引擎升級(jí)后新版本的子域制作

自從引擎升級(jí)到2.0.7版本之后,之前使用的方法沒用了,重新修改子域的代碼。
在主域中負(fù)責(zé)繪制子域的node增加一個(gè)WXSubContextView屬性。(必須)
子域現(xiàn)在不能使用美術(shù)字體,想辦法用程序字替代。其它內(nèi)容變化不大,可以酌情修改。
有一個(gè)分享到群回來看排行榜這個(gè)功能由于微信的改動(dòng)導(dǎo)致現(xiàn)在很雞肋,參考了競(jìng)品,都是必須點(diǎn)擊自己分享到群的分享頁卡重新進(jìn)入游戲之后再把自己的排行榜刷新,這樣原本的排行榜就被替代了,這個(gè)功能暫時(shí)隱藏了。
還有就是適配的問題,子域的適配可能會(huì)因?yàn)榇笃潦謾C(jī)導(dǎo)致界面資源的橫向拉伸,或者坐標(biāo)偏移,這個(gè)需要進(jìn)行適配。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容