微信小游戏API调用Egret
野子电竞数据官网改版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
打包微信工程,并在开发者工具打开。运行获取到微信用户信息。
————————————————