摘要:今天我們分享的菜鳥文檔將介紹微信小游戲好友排行榜的制作過程,包括創建項目并發布微信開發者平臺添加小游戲打開開放域功能主域和開放域通訊,以及與原生的布局。
寫在前面:隨著越來越多的新人開始接觸白鷺引擎,創作屬于自己的游戲。考慮到初學者會遇到一些實際操作問題,我們近期整理推出“菜鳥”系列技術文檔,以便更好的讓這些開發者們快速上手,Egret大神們可以自動忽略此類內容。
今天我們分享的菜鳥文檔將介紹微信小游戲好友排行榜的制作過程,包括創建項目并發布、微信開發者平臺添加小游戲、打開開放域功能、主域和開放域通訊,以及ShareCanvas與原生Canvas的布局。
微信好友排行榜利用微信關系鏈數據實現一個簡單的排行榜,此文檔包含關系鏈數據、Egret平臺數據接口、ShareCanvas離屏畫布、原生Canvas布局。
創建項目并發布
創建Egret項目,使用Launcher發布,建議使用您個人AppID(測試用的id限制很多功能,例如分享)
添加小游戲
設置 > 基本設置 > 添加小程序(能夠通過審核即可)
打開開放域功能
使用微信開發者工具打開發布的微信小游戲,或在終端運行 egret run --target wxgame ,找到游戲配置文件game.json,配置如下,其中openDataContext使小游戲支持了微信開放域功能。
{ "deviceOrientation": "portrait", "networkTimeout": { "request": 5000, "connectSocket": 5000, "uploadFile": 5000, "downloadFile": 5000 }, "openDataContext": "openDataContext" }
ShareCanvas介紹
開放數據域的繪制文件中已經擁有一個通過Canvas API繪制的排行榜 ,SharedCanvas 是主域和開放數據域都可以訪問的一個離屏畫布,原理如下所示。
index.js文件中,官方已經為我們繪制了一個簡單的排行榜demo,渲染出的效果如下圖所示
主域和開放域通訊
開放域已經為我們繪制好了虛擬排行榜,現在只需要讓主域打開開放域的排行榜就可以展示在Canvas上了。
首先,創建開放數據域顯示對象,離屏畫布的顯示對象可直接在主域中通過以下的方式進行創建,創建的顯示對象為 egre.Bitmap 類型,可直接添加到舞臺上。
//在主域中創建開放數據域顯示對象 var platform = window.platform; this.bitmap = platform.openDataContext.createDisplayObject(null,this.stage.stageWidth, this.stage.stageHeight);
其次,通過主域與開放數據域的單向數據接口進行通訊。主域可向開放數據域單方向發送消息。
//主域向子域發送數據 plathform.openDataContext.postMessage({ isRanking: this.isRankClick, text: "egret", year: (new Date()).getFullYear(), command: "open" });
子域可通過監聽事件的方式獲取到主域發送過來的自定義信息。
1 //子域接收信息 2 wx.onMessage((data) => { 3 if (data.command == "open") { 4 //顯示開放域 5 if (!hasCreateScene) { 6 //創建并初始化 7 hasCreateScene = createScene(); 8 ... 9 } 10 }
最后,開發者便可以在主域中發送數據,請求開放域打開排行榜,子域接收到數據打開排行榜。
擴展
您可以通過修改index.js文件內的參數改變排行榜樣式達到目標效果,可以使用自己的圖片放到對應的路徑中(總文件大小不要超過4M)。布局建議不要使用固定數字的數值,而是以 stageWidth stageHeight 舞臺寬高作為基數,以盡量減少不同手機出現的適配問題。
1 /** 2 * 資源加載組,將所需資源地址以及引用名進行注冊 3 * 之后可通過assets引用名方式進行獲取 4 */ 5 var assets = { 6 icon: "openDataContext/assets/icon.png", 7 box: "openDataContext/assets/signIn.png", 8 panel: "openDataContext/assets/bg.png", 9 button: "openDataContext/assets/OK_button.png", 10 title: "openDataContext/assets/rankingtitle.png" 11 };
注意:安卓偶爾有不顯示數據的BUG,在index.js中給字體加一個顏色即可
1 //設置字體 2 context.font = fontSize + "px Arial"; 3 context.fillStyle = "#fff"
小結
通過本文您可以對以下問題有更深入的了解
對微信的關系鏈數據有更深入的理解
平臺數據接口的作用和使用
熟悉主域與開放域數據通訊規則
對原生Canvas的布局有所了解
本文關鍵代碼參考
1 private isRankClick:boolean = false; 2 private bitmap: egret.Bitmap; 3 /** 4 * 排行榜遮罩,為了避免點擊開放數據域影響到主域,在主域中建立一個遮罩層級來屏蔽點擊事件. 5 * 根據自己的需求來設置遮罩的 alpha 值 0~1. 6 */ 7 private rankingListMask: egret.Shape; 8 9 //顯示微信排行榜 10 public obBtnRankingClick(e:egret.TouchEvent) { 11 console.log("點擊排行榜"); 12 let plathform:any = window.platform; 13 if(!this.isRankClick) { 14 //處理遮罩,避免開放域數據影響主域 15 this.rankingListMask = new egret.Shape(); 16 this.rankingListMask.graphics.beginFill(0x000000,1); 17 this.rankingListMask.graphics.drawRect(0,0,this.stage.width,this.stage.height); 18 this.rankingListMask.graphics.endFill(); 19 this.rankingListMask.alpha = 0.4; 20 //設置為true,以免觸摸到下面的按鈕 21 this.rankingListMask.touchEnabled = true; 22 this.addChildAt(this.rankingListMask,999); 23 24 //讓排行榜按鈕顯示在容器內 25 this.addChild(this.btn_ranking); 26 27 //顯示開放域數據 28 this.bitmap = plathform.openDataContext.createDisplayObject(null, this.stage.stageWidth, this.stage.stageHeight); 29 this.addChild(this.bitmap); 30 //主域向子域發送數據 31 plathform.openDataContext.postMessage({ 32 isRanking: this.isRankClick, 33 text: "egret", 34 year: (new Date()).getFullYear(), 35 command: "open" 36 }); 37 38 this.isRankClick = true; 39 } 40 else { 41 this.bitmap.parent && this.bitmap.parent.removeChild(this.bitmap); 42 this.rankingListMask.parent && this.rankingListMask.parent.removeChild(this.rankingListMask); 43 this.isRankClick = false; 44 plathform.openDataContext.postMessage({ 45 isRanking: this.isRankClick, 46 text: "egret", 47 year: (new Date()).getFullYear(), 48 command: "close" 49 }); 50 } 51 }
本文源碼鏈接:https://github.com/shenysun/F...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97134.html
摘要:概述要做這個好友排行榜必然要有好友的戰績比分然后再做排序最后將數據呈現在上可以分為下面幾個步驟保存每個用戶的分數獲取好友列表并獲取好友的分數渲染排行榜保存每個用戶的分數保存每個用戶的分數需要調用微信的云存儲將用戶的分數持久化的存起來保存用戶 概述 ? 要做這個好友排行榜.必然要有好友的戰績比分,然后再做排序,最后將數據呈現在UI上 , 可以分為下面幾個步驟: 保存每個用戶的分數...
摘要:前言微信小游戲開放了好友關系鏈,使得小游戲的社交能力得到了加強,有助于增加游戲的活躍度。先做一個統一的事件分發機制監聽微信的觸摸事件接口小結實際上是寫了一個微小的渲染引擎,便于擴展,容易理解學習。 前言 ???????微信小游戲開放了好友關系鏈,使得小游戲的社交能力得到了加強,有助于增加游戲的活躍度。出于安全限制,只能在開放域使用關系鏈數據,但是開放域是獨立的工程,使得包體變大不小,所...
摘要:今天杭州又是大雨,被淋了個落湯雞,都怪我家大狼狗非要騎電動車,我昨天吐槽要買的帥氣的雨衣還沒有買不過大雨和飛機大戰小游戲更配哦。微信早已正式發布微信內置飛機大戰游戲,目前該游戲已經下線。此時,界面中會顯示此次玩家的飛機大戰分數。showImg(https://user-gold-cdn.xitu.io/2019/5/15/16ab9377884b99f7); 今天杭州又是大雨,被淋了個落湯雞...
摘要:今天杭州又是大雨,被淋了個落湯雞,都怪我家大狼狗非要騎電動車,我昨天吐槽要買的帥氣的雨衣還沒有買不過大雨和飛機大戰小游戲更配哦。微信早已正式發布微信內置飛機大戰游戲,目前該游戲已經下線。此時,界面中會顯示此次玩家的飛機大戰分數。 今天杭州又是大雨,被淋了個落湯雞,都怪我家大狼狗非要騎電動車,我昨天吐槽要買的帥氣的雨衣還沒有買,不過大雨和飛機大戰小游戲更配哦。 這篇文章來自我司的王老吉同...
閱讀 2800·2021-11-22 14:44
閱讀 541·2021-11-22 12:00
閱讀 3683·2019-08-30 15:54
閱讀 1570·2019-08-29 17:15
閱讀 1898·2019-08-29 13:50
閱讀 1107·2019-08-29 13:17
閱讀 3513·2019-08-29 13:05
閱讀 1181·2019-08-29 11:31