[]微信小游戏利用开放域好友关系链做排行榜
1.引擎版本: 1.7.18(我直接使用链接:引擎版本及IDE下载)
2.项目结构
需要建立两个项目:一个用于主域(游戏本身),一个用于开放放域,结构如下:
wxdemo
|-------demo-main
|-------demo-open
即建立文件夹wxdemo,然后在下面建立两个文件夹demo-main(主域)和demo-open(开放域),在这两个文件夹下分别建立微信小游戏项目。
2.在LayaAirIDE中对上面建立的两个项目中搜索关键字bitmap._addReference,在laya.core.js中找到,如下代码:
if (bitmap){
bitmap._addReference();
}将其改成:
if (bitmap && bitmap._addReference){
bitmap._addReference();
}
其实就是在if中加了个判断
3.修改主域的game.js文件,在里面增加开放域的映射目录
"openDataContext": "src/myOpenDataContext",
请记住这个目录,此目录就是开放域发布的目录,所以在发布开放域项目时,请将发布目录指向此目录
4.在主域项目的bin目录下建立目录结构: src/myOpenDataContext
按照我建立的这个项目,那目录路径就是:/wxdemo/demo-main/src/myOpenDataContext
5.主域这边代码:
import Label = Laya.Label;
import Handler = Laya.Handler;
import Loader = Laya.Loader;
class GameBootstrap{
public constructor(){
this.init();
}
private init():void{
//初始化微信小游戏
Laya.MiniAdpter.init(true);
//程序入口
Laya.init(600, 400,Laya.WebGL);
//激活资源版本控制
Laya.ResourceVersion.enable("version.json", Handler.create(this, this.beginLoad), Laya.ResourceVersion.FILENAME_VERSION);
}
private beginLoad():void{
Laya.loader.load("res/atlas/comp.atlas", Handler.create(this, this.onLoaded));
}
private onLoaded(): void {
console.log("onLoaded ......");
GameBootstrap.wxPostMessage({
cmd:1,
text: 'hello',
year: (new Date()).getFullYear()
},null,function(message){
let wx = Laya.Browser.window.wx;
let openDataContext = wx.getOpenDataContext();
var rankTexture:Laya.Texture = new Laya.Texture(Laya.Browser.window.sharedCanvas);
rankTexture.bitmap.alwaysChange = true;//小游戏使用,非常费,每帧刷新
let sprite:Laya.Sprite = new Laya.Sprite();
Laya.stage.addChild(sprite);
sprite.graphics.drawTexture(rankTexture,0,0,rankTexture.width,rankTexture.height);
// console.log("再次往开放域发请求");
// openDataContext.postMessage({
// cmd:2,
// text: 'hello---2',
// year: (new Date()).getFullYear()
// });
});
}
/**
* 启动主域
*/
public start():void{
console.log("Game running ......");
}
/**
* 向开放域发送消息,并接收开放域返回过来的数据,
* 可根据发送参数和接收数据在主域这边进行下步处理
* @param message
* @param caller
* @param callback
*/
public static wxPostMessage(message:any,caller:any,callback:Function):void{
let wx = Laya.Browser.window.wx;
if(wx != undefined){
let openDataContext = wx.getOpenDataContext();
openDataContext.postMessage(message);
Laya.timer.once(400,this,function():void{
//回调处理
if(caller == null || caller == undefined){
callback(message);
}else{
caller.callback(message);
}
});
}
}
}
let bootstrap = new GameBootstrap();
bootstrap.start();
开放域代码:
class OpenDataBootstrap {
private wx:any;
public constructor(){
this.init();
}
private init():void{
//初始化微信小游戏
Laya.MiniAdpter.init(true,true);
//程序入口
Laya.init(600, 400);
this.wx = Laya.Browser.window.wx;
}
/**
* 监听服务端发送过来的消息
*/
private wxOnMessage():void{
if(this.wx!=undefined){
// Laya.timer.once(200,this,function():void{
//监听主域发送过来的消息
this.wx.onMessage(function(message:any){
if(message == undefined || message.cmd == undefined){
console.log("消息传递格式错误 ......"+JSON.stringify(message));
return;
}
console.log("收到主域发送过来的数据"+JSON.stringify(message));
OpenDataBootstrap.dispatch(message);
});
// });
}
}
/**
* 消息调度
* 可以将message.cmd 跟消息处理类或方法用字典做个映射表
* @param message
*/
private static dispatch(message:any):void{
switch(message.cmd){
case 1:
var testUI: ui.test.TestPageUI = new ui.test.TestPageUI();
testUI.x = 100;
testUI.y = 20;
Laya.stage.addChild(testUI);
break;
case 2:
console.log("cmd: "+message.cmd);
break;
default:
console.log(JSON.stringify(message))
}
}
public start():void{
console.log("OpenDataBootstrap running ...... ......");
this.wxOnMessage();
}
}
let bootstrap = new OpenDataBootstrap();
//启动开放域处理
bootstrap.start();
6.微信开发者工具中的调试项目目录指定为主域项目的bin目录:
/wxdemo/demo-main/bin
注意:不论修改的是主域代码还是开放域代码都要重新发布对应的项目!!!
没有找到相关结果
要回复问题请先登录
7 个回复
callback
赞同来自: Speculator 、138*****782
这个一开 安卓就卡成翔了~~~ 你们没有这个问题?
Aar0n
赞同来自:
A4
赞同来自:
bitmap._addReference();
}
我去还有这种操作
yanmingjie
赞同来自:
老街里的巷
赞同来自:
"openDataContext": "src/myOpenDataContext"
这一步是填到game.js还是game.json
Jessica
赞同来自:
邮箱41239808@qq.com
jlike521
赞同来自:
纯js 的 3D 版本的 刷新会有点问题 二次正常