CCWechatScreenShotMgr.ts 4.23 KB

export default class CCWechatScreenShotMgr {

    private static _instance: CCWechatScreenShotMgr = new CCWechatScreenShotMgr();

    public static getInstance (): CCWechatScreenShotMgr {
        return CCWechatScreenShotMgr._instance;
    }

    /**
     * 
     * @param worldPos 节点的世界坐标
     * @param width 节点的宽度
     * @param height 节点的高度
     */
    doShot (worldPos: cc.Vec2 | cc.Vec3, width: number, height: number, 
        successCallback: Function = () => {},
        successCheckCallback: () => boolean = () => false ,
        shareFailCallback: Function = () => {},
        failCallback: Function = () => {},
        completeCallback: Function = () => {}) {
        if (cc.sys.platform === cc.sys.WECHAT_GAME) {
            if (!wx.showShareImageMenu) {
                console.log("截图失败");
                shareFailCallback();
                return;
            }
            const ccCanvas = cc.find("Canvas");
            const xscale = (worldPos.x - width / 2) / ccCanvas.width;
            const yscale = 1 - (worldPos.y + height / 2) / ccCanvas.height;
            let x = canvas.width * xscale;
            let y = canvas.height * yscale;
            const w = width / ccCanvas.width * canvas.width;
            const h = height / ccCanvas.height * canvas.height;
            let data = {
                x: x,
                y: y,
                width: w,
                height: h,
                destWidth: w,
                destHeight: h,
                fileType: 'png',
                quality: 1,
                success: (res) => {
                    if (successCheckCallback() === false) {
                        console.log("截图界面被关闭");
                        return;
                    }
                    console.log("截图成功");
                    console.log("res: ", res);
                    console.log("res.tempFilePath: ", res.tempFilePath);
                    wx.showShareImageMenu({
                        path: res.tempFilePath
                    })
                    //     //分享卡片
                    //     wx.shareAppMessage({
                    //         imageUrl: res.tempFilePath
                    //    })
                    successCallback();
                },
                fail: (e) => {
                    console.log("截图失败");
                    console.log(e);
                    failCallback();
                },
                complete: () => {
                    console.log("截图完成");
                    completeCallback();
                }
            }
            let _tempFilePath = canvas.toTempFilePath(data);
            cc.log(`Capture file success!${_tempFilePath}`);
        }
    }

    shotFullScreen (
        successCallback: Function = () => {},
        successCheckCallback: () => boolean = () => false ,
        shareFailCallback: Function = () => {},
        failCallback: Function = () => {},
        completeCallback: Function = () => {}) {

        if (cc.sys.platform === cc.sys.WECHAT_GAME) {
            //canvas 是微信的,报错不用管
            //单纯的分享一张图
            if (!wx.showShareImageMenu) {
                console.log("截图失败");
                shareFailCallback();
                return;
            }
            canvas.toTempFilePath({
                success: (res) => {
                    if (successCheckCallback() === false) {
                        console.log("截图界面被关闭");
                        return;
                    }
                    console.log("截图成功");
                    wx.showShareImageMenu({
                        path: res.tempFilePath
                    })
                    //     //分享卡片
                    //     wx.shareAppMessage({
                    //         imageUrl: res.tempFilePath
                    //    })
                    successCallback();
                },
                fail: (e) => {
                    console.log("截图失败");
                    console.log(e);
                    failCallback();
                },
                complete: () => {
                    console.log("截图完成");
                    completeCallback();
                }
            })
        }
    }
}