微信小程序里Laya使用FairyGUI打造微信排行榜

一、主域
// 微信 排行榜
export class WxRank
{
public static Instance:WxRank;
public static KBEEvent = window["Event"];
 
constructor()
{
WxRank.Instance = this;
// WxRank.KBEEvent.Register("set_Score", this, Laya.Handler.create(this, this.set_Score, null, false));
WxRank.KBEEvent.Register("showRankListView", this, Laya.Handler.create(this, this.showRankListView, null, false));
}
static get app()
{
if(WxRank.Instance == undefined)
{
new WxRank();
}
return WxRank.Instance;
}
 
// 上传分数 到微信
private set_Score(score:number)
{
let kvDataList = new Array();
let date = new Date().getTime();
 
/*let myValue = JSON.stringify({
"wxgame":{ "score": score, "update_time":date.toString(),}
});
kvDataList.push({key:"score", value:myValue});*/
 
kvDataList=[{"key":"Score","value":score}]
Laya.Browser.window.wx.setUserCloudStorage({
KVDataList: kvDataList,
success: function(res)
{
console.log("上传分数成功--------------");
}
})
}
 
// 发送消息到子域
private sendMsgToSub(strData:string)
{
if(!Laya.Browser.onWeiXin)
return;
Laya.Browser.window.wx.getOpenDataContext().postMessage({message:strData});
}
 
/**
* 显示排行榜
*/
private showRankListView():void
{
this.sendMsgToSub(JSON.stringify({tag: "showRankView"}));
}
 
// 给子域 加载 rankUI 资源文件
initRankUIFile()
{
let openRes:Array<any> = []
openRes.push({url:"FairyGui/List_atlas0.png", type:laya.net.Loader.IMAGE })
openRes.push({url:"FairyGui/List.fui", type:laya.net.Loader.BUFFER})
for (let i = 0; i < openRes.length; i++)
{
var cache = [];
this.sendMsgToSub(JSON.stringify({tag:"filedata", url:openRes[i].url, type:openRes[i].type, data:Laya.loader.getRes(openRes[i].url)}, function(key, value){
if (typeof value !== 'object')
return value;
if (cache.indexOf(value) !== -1)return;
cache.push(value);
if(value instanceof ArrayBuffer)
return String.fromCharCode.apply(null, new Uint8Array(value))
return value;
}));
cache = null
}
this.sendMsgToSub(JSON.stringify({tag:"loadRes"}));
}
 
/**
* 设置画布
*/
public initOpenDataContext()
{
if(!Laya.Browser.onWeiXin)
return;
 
// 设置开放域画布的大小
Laya.Browser.window.sharedCanvas.width = Laya.stage.width;
Laya.Browser.window.sharedCanvas.height = Laya.stage.height;
 
Laya.timer.once(1000, this, e =>
{
this.sendMsgToSub(JSON.stringify({tag:"resizeShared", data: {width:Laya.stage.width, height:Laya.stage.height, matrix:Laya.stage._canvasTransform}}))
});
}
 
 
 
}
 
二、子域
import Loader = laya.net.Loader;
 
// 程序入口
class GameMain
{
public static rankList:User[];
public loadRes:Array<any> = []
 
// 字符串转为ArrayBuffer对象,参数为字符串
static str2ab(str) {
var buf = new ArrayBuffer(str.length); // 每个字符占用2个字节
var bufView = new Uint8Array(buf);
for (var i=0, strLen=str.length; i<strLen; i++) {
bufView[i] = str.charCodeAt(i);
}
return buf;
}
 
constructor()
{
Laya.MiniAdpter.init(true, true);
Laya.init(768,1300);
 
Laya.stage.alignV = Laya.Stage.ALIGN_MIDDLE;
Laya.stage.alignH = Laya.Stage.ALIGN_CENTER;
Laya.stage.scaleMode = Laya.Stage.SCALE_SHOWALL;
if(Laya.Browser.onWeiXin )
Laya.stage.scaleMode = "fixedauto";
 
// 用来接收主域传来的消息
this.getMainMessage();
}
 
// 用来接收主域传来的消息
getMainMessage()
{
if(!Laya.Browser.onWeiXin)
return;
 
Laya.Browser.window.wx.onMessage(data =>
{
let MiniFileMgr = laya.wx.mini.MiniFileMgr;
 
if(data.message == undefined)
{
console.log("用来接收主域传来的消息 为 undefine");
return;
}
var tmpdate = JSON.parse(data.message);
if(typeof(data) == "string")
{
tmpdate = JSON.parse(data);
}
console.log("收到主域发过来的消息了。。。。。。。。。。。。。。。。。。。");
if(tmpdate.tag == undefined)
return;
switch(tmpdate.tag)
{
case "showRankView":
{
console.log("显示排行榜");
this.showRankView();
}
break;
case "loadRes":
{
console.log("loadRes 子域加载资源。、、、、、、、、、、、、");
Laya.loader.load(this.loadRes, Laya.Handler.create(this, this.onLoadRank));
}
break;
case "filedata":
{
console.log("filedata子域加载资源。、、、、、、、、、、、、");
this.loadRes.push({url:tmpdate["url"],type:tmpdate["type"]})
var tt = tmpdate.data
if(tmpdate["type"] === Loader.BUFFER)
tt = GameMain.str2ab(tmpdate.data);
MiniFileMgr.ziyuFileData[tmpdate.url] = tt;//文本数据
}
break;
case "filenative":
{
console.log("filenative 子域加载资源。、、、、、、、、、、、、");
if(tmpdate.isAdd)
MiniFileMgr.filesListObj[tmpdate.url] = tmpdate.data;
else
delete MiniFileMgr.filesListObj[tmpdate.url];
}
break;
case "resizeShared":
{
console.log("resizeShared 子域加载资源。、、、、、、、、、、、、");
let tempMatrix = tmpdate.data.matrix;
let matrix:Laya.Matrix = new Laya.Matrix();
matrix.a = tempMatrix.a;
matrix.b = tempMatrix.b;
matrix.c = tempMatrix.c;
matrix.d = tempMatrix.d;
Laya.stage._canvasTransform = matrix;//重新设置矩阵
}
break;
}
});
}
 
onLoadRank(){
console.log("子域加载资源完成。。。。。。。。");
// Laya.loader.load([{ url: "FairyGui/Ranking.fui", type: Loader.BUFFER }
// ], Laya.Handler.create(this, this.onDialog));
fairygui.UIPackage.addPackage("FairyGui/List");
RankUI.Create();
// fairygui.UIPackage.createObject("Ranking", "Rankings");
// var tt = fairygui.GRoot.inst.addChild(fairygui.UIPackage.createObject("List", "Comp_list")).asCom;
// fairygui.GRoot.inst.addChild(tt);
// Laya.stage.addChild(tt.displayObject);
}
 
// 获得排行榜 显示排行榜
showRankView():void
{
if(!Laya.Browser.onWeiXin)
return;
Laya.Browser.window.wx.getFriendCloudStorage({
keyList:["Score"],
success: res =>
{
console.log("获得 排行榜 数据 成功");
GameMain.rankList = [];
let sucData = res.data;
 
for(let i = 0; i < sucData.length; i++)
{
let score = 0;
for(let idx = 0; idx < sucData[i].KVDataList.length; idx++)
{
switch(sucData[i].KVDataList[idx].key)
{
case "Score":
{
score = sucData[i].KVDataList[idx].value;
break;
}
}
}
let user = new User(sucData[i].nickname, sucData[i].avatarUrl, score, sucData[i].openid);
GameMain.rankList.push(user);
}
},
fail: e =>{
console.log("获取失败-------------------" + e);
},
complete: e =>{
console.log("获取完成-------------------" + e);
RankUI.app.onShowUI();
}
})
}
 
}
new GameMain();
posted @ 2023-05-20 13:31  柳心碎月  阅读(250)  评论(0)    收藏  举报