微信小游戏API调用Egret

wjeymiantan 2019-09-08

野子电竞数据官网改版https://www.xxe.io/全新登场
在Egret中是可以直接调用微信小游戏的API的,Egret中添加了平台代码,可以调用各个平台API。

新建工程会发现在src文件夹中会包含一个Platform.ts的文件,如果没有请创建。

/**

平台数据接口。
由于每款游戏通常需要发布到多个平台上,所以提取出一个统一的接口用于开发者获取平台数据信息
推荐开发者通过这种方式封装平台逻辑,以保证整体结构的稳定
由于不同平台的接口形式各有不同,白鹭推荐开发者将所有接口封装为基于 Promise 的异步形式
*/
declare interface Platform {
getUserInfo(): Promise;
login(): Promise
}
class DebugPlatform implements Platform {
async getUserInfo() {
return { nickName: “username” }
}
async login() {
}
}
if (!window.platform) {
window.platform = new DebugPlatform();
}
declare let platform: Platform;
declare interface Window {
platform: Platform
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
并将代码拷贝到Platform.ts中。

二、打包发布微信工程,并在微信开发者工具中打开,可以看到platform.js文件,若没有,请创建platform.js文件。微信的其他接口也要写到该文件中,分享、微信点击进入等。

/**

请在白鹭引擎的Main.ts中调用 platform.login() 方法调用至此处。
*/
class WxgamePlatform {
name = ‘wxgame’
login() {
return new Promise((resolve, reject) => {
wx.login({
success: (res) => {
resolve(res)
}
})
})
}

getUserInfo() {

return new Promise((resolve, reject) => {
    wx.getUserInfo({
        withCredentials: true,
        success: function (res) {
            var userInfo = res.userInfo
            var nickName = userInfo.nickName
            var avatarUrl = userInfo.avatarUrl
            var gender = userInfo.gender //性别 0:未知、1:男、2:女
            var province = userInfo.province
            var city = userInfo.city
            var country = userInfo.country
            resolve(userInfo);
        }
    })
})

}

openDataContext = new WxgameOpenDataContext();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
}

class WxgameOpenDataContext {
createDisplayObject(type,width,height){
const bitmapdata = new egret.BitmapData(sharedCanvas);
bitmapdata.$deleteSource = false;
const texture = new egret.Texture();
texture._setBitmapData(bitmapdata);
const bitmap = new egret.Bitmap(texture);
bitmap.width = width;
bitmap.height = height;

egret.startTick((timeStarmp) => {
    egret.WebGLUtils.deleteWebGLTexture(bitmapdata.webGLTexture);
    bitmapdata.webGLTexture = null;
    return false;
}, this);
return bitmap;

}

postMessage(data){

const openDataContext = wx.getOpenDataContext();
openDataContext.postMessage(data);

}
1
2
3
4
5
6
7
8
9
10
11
12
}

window.platform = new WxgamePlatform();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Platform声明了平台函数,在egret中可以直接调用,在各个平台中实现代码即可。

三、在egret中调用登陆,并获取微信用户信息。在main.ts中写入如下代码。

await platform.login()调用登陆API,
const userInfo = await platform.getUserInfo();获取微信用户信息,并返回用户信息,
await 异步调用,返回调用结果在执行下一步。

class Main extends egret.DisplayObjectContainer {

public constructor() {

super();
this.addEventListener(egret.Event.ADDED_TO_STAGE, this.onAddToStage, this);

}

private onAddToStage(event: egret.Event) {

this.runGame().catch(e => {
    console.log(e);
})

}

private async runGame() {

await platform.login();
const userInfo = await platform.getUserInfo();
this.createGameScene(userInfo);

}

private textfield: egret.TextField;

/**

  • 创建游戏场景
  • Create a game scene

*/
private createGameScene(userInfo: any) {

let bg: eui.Rect = new eui.Rect();
this.addChild(bg);
bg.width = this.stage.width;
bg.height = this.stage.height;
bg.fillColor = 0xF8F8F8;

let avatar: eui.Image = new eui.Image();
avatar.x = 100;
avatar.y = 100;
avatar.width = 120;
avatar.height = 120;
avatar.source = userInfo.avatarUrl;
this.addChild(avatar);

let nickName: eui.Label = new eui.Label();
nickName.x = 100;
nickName.y = 250;
nickName.textColor = 0xff0000;
nickName.text = userInfo.nickName;
this.addChild(nickName);

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
打包微信工程,并在开发者工具打开。运行获取到微信用户信息。
————————————————

相关推荐