Egret -- Egret 微信小游戏API调用

在Egret中是可以直接调用微信小游戏的API的,Egret中添加了平台代码,可以调用各个平台API。

该章效果如下:
Egret -- Egret 微信小游戏API调用_第1张图片
一、新建工程会发现在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
}

并将代码拷贝到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();
}

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);
    }
}

window.platform = new WxgamePlatform();

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);
    }
}

打包微信工程,并在开发者工具打开。运行获取到微信用户信息。

你可能感兴趣的:(Egret)