import { randomRange, view } from "cc"; import GlobalValue, { VideoRoleType } from "../Common/GlobalValue"; import SubManager from "../../Sub/SubManager"; import { I_SDK_UserInfo_Callback, SDKManager } from "./SDKManager"; import Utils from "../Common/Utils"; import uma from "../../../utils/uma.wx.min.js"; import { InnerMsgCode } from "../Config/InnerMsgCode"; import { logger } from "db://assets/Scripts/Main/Common/Logger"; //广告ID const wx_banner_ad_unit_id = "test"; const wx_splash_ad_unit_id = "test"; const wx_video_ad_unit_id = "adunit-a79e037dfaac7bae"; export class luffaSDK { static g_InGameScene = null; //游戏场景值 private wx_video: any = null; private wx_splash: any = null; private wx_banner: any = null; private wx_video_callback: Function = null; private wx_video_tag: number = null; private wx_gameClub: any = null; //游戏圈按钮 private ShareSTime: any; private ShareCb: any; //分享回调 private shareTxt = [ "分享失败", "请分享到一个群", "请分享给一位好友", "分享过于频繁", ]; //初始化 init(cb: Function = null) { // 保持屏幕常亮 window["wx"].setKeepScreenOn({ keepScreenOn: true }); luffaSDK.g_InGameScene = window["wx"].getLaunchOptionsSync().scene; logger.log("init luffa - 进入游戏的场景值", luffaSDK.g_InGameScene); //this.init_video(); //初始化视频广告 //this.init_splash(); //初始化插屏广告 //this.init_banner(); //初始化Banner广告 横幅广告 this.qiangzhiUpdata(); //检测更新 cb && cb(); } /**获取用户授权状态 * @param autoKey string 授权类型 userInfo=用户信息,对应接口wx.getUserInfo */ checkAutoSetting(autoKey: string, cb: Function = null) { window["wx"].getSetting({ success(res: any) { logger.log("微信 - 检测权限状态 succ:", JSON.stringify(res)); if (autoKey == "userInfo" && res.authSetting["scope.userInfo"]) { cb && cb(true); } else { cb && cb(false); } }, fail(res: any) { logger.log("微信 - 检测权限状态 fail:", JSON.stringify(res)); cb && cb(false); }, }); } /** * 获取个人信息 */ getUserInfo(cb: I_SDK_UserInfo_Callback = null) { logger.log("微信 - 正在获取用户信息..."); var self = this; window["wx"].getUserInfo({ success: (res) => { logger.log("微信 - 获取用户信息成功:", res); cb && cb({ avatarUrl: res.userInfo.avatarUrl, nickName: res.userInfo.nickName, }); }, fail: (err) => { logger.log("微信 - 获取用户信息失败:", err); self.openUserAuthorize(cb); }, }); } //申请用户信息授权 openUserAuthorize(cb: any) { var self = this; window["wx"].getSetting({ scope: "scope.userInfo", success(res: any) { logger.log("微信 authorize succ:", JSON.stringify(res)); if (res.authSetting["scope.userInfo"]) { self.getUserInfo(cb); } else { let systemInfo = window["wx"].getSystemInfoSync(); let button = window["wx"].createUserInfoButton({ type: "text", text: "", // @ts-ignore style: { left: 0, top: 0, width: systemInfo.screenWidth, height: systemInfo.screenHeight, backgroundColor: "#00000000", //最后两位为透明度 textAlign: "center", }, }); logger.log("微信 点击开始游戏授权用户信息"); button.onTap((res) => { button.destroy(); // if (res.userInfo) { // logger.log(res.userInfo) // //此时可进行登录操作 // cb && cb(res.userInfo) // } logger.log("微信 点击Tap", res); self.getUserInfo(cb); }); } }, fail(err) { logger.log("微信 - authorize fail", err); }, }); } //region 微信登录 login(cb: Function = null) { window["wx"].login({ success: (res) => { if (res.code) { logger.log("微信 - 登录成功", res.code); cb && cb({ platform: 1, code: res.code }); } else { logger.log("微信 - 登录失败", res.errMsg); cb && cb({ platform: 1, code: null }); } }, fail(res: any) { logger.log(`微信 login 调用失败`); logger.log(res.anonymousCode); cb && cb({ platform: 1, code: null }); }, }); } //初始化视频广告 private init_video() { if ((wx_video_ad_unit_id as any) == "test") { logger.log("微信 激励广告id未配置,跳过此类型初始化"); return; } this.wx_video = window["wx"].createRewardedVideoAd({ adUnitId: wx_video_ad_unit_id, disableFallbackSharePage: true, // 是否禁用分享页,默认为false }); this.wx_video.onLoad(() => { logger.log("onLoad event emit"); }); this.wx_video.onError((err) => { logger.log("onError event emit", err); }); this.wx_video.onClose((res) => { logger.log("onClose event emit", res); // 用户点击了【关闭广告】按钮 // 小于 2.1.0 的基础库版本,res 是一个 undefined if ((res && res.isEnded) || res === undefined) { // 正常播放结束,可以下发游戏奖励 if (this.wx_video_callback) { this.wx_video_callback(this.wx_video_tag); } } else { // 播放中途退出,不下发游戏奖励 //wx_video_callback(-1); } SDKManager.video_ad_back(); }); } //初始化插屏广告 private init_splash() { if ((wx_splash_ad_unit_id as any) == "test") { logger.log("微信 插屏广告id未配置,跳过此类型初始化"); return; } // 创建插屏广告实例,提前初始化 if (window["wx"].createInterstitialAd) { this.wx_splash = window["wx"].createInterstitialAd({ adUnitId: wx_splash_ad_unit_id, }); this.wx_splash.onLoad(() => { logger.log("splash onLoad event emit"); }); this.wx_splash.onError((err) => { logger.log("splash onError event emit", err); }); this.wx_splash.onClose((res) => { logger.log("splash onClose event emit", res); }); } } //初始化Banner private init_banner() { if ((wx_banner_ad_unit_id as any) == "test") { logger.log("微信 横幅广告id未配置,跳过此类型初始化"); return; } let winSize = window["wx"].getSystemInfoSync(); let bannerHeight = 80; let bannerWidth = 300; this.wx_banner = window["wx"].createBannerAd({ adUnitId: wx_banner_ad_unit_id, adIntervals: 30, style: { left: (winSize.windowWidth - bannerWidth) / 2, top: winSize.windowHeight - bannerHeight, width: bannerWidth, }, }); //微信缩放后得到banner的真实高度,从新设置banner的top 属性 this.wx_banner.onResize((res) => { this.wx_banner.style.top = winSize.windowHeight - this.wx_banner.style.realHeight; }); this.wx_banner.onError((res) => {}); } //region 广告 //显示视频广告 show_video(callback: Function, tag: number) { if ((wx_video_ad_unit_id as any) == "test") { logger.log("未接入广告ID,视频广告请求直接返回"); callback && callback(); SDKManager.video_ad_back(); return; } if (this.wx_video) { this.wx_video_callback = callback; this.wx_video_tag = tag; this.wx_video.load().then(() => { this.wx_video.show().catch((err) => { this.wx_video.load().then(() => this.wx_video.show()); }); }); } } //显示插屏 show_splash() { // 在适合的场景显示插屏广告 // if (this.wx_splash) { // this.wx_splash.show().catch((err) => { // this.wx_splash.load().then(()=>{ // }) // }) // } if (this.wx_splash) { this.wx_splash .load() .then(() => { this.wx_splash.show(); }) .catch((err) => { logger.log(err); }); } } //显示Banner show_banner() { if (this.wx_banner) { this.wx_banner.show(); //banner 默认隐藏(hide) 要打开 } } //隐藏Banner hide_banner() { if (this.wx_banner) { this.wx_banner.hide(); //banner 默认隐藏(hide) 要打开 } } //region 分享 /**分享图片*/ private SharePicAry = [ { id: "7wUnG0FFQry/nCdxI9kKYQ==", url: "https://mmocgame.qpic.cn/wechatgame/W9Az4zfwkAvic2MPaoBEdYEMVht0VwJv6eQF2myMU8IIFbQAZ92Fg73Qp9MUdPMj8/0", }, { id: "NCa1cR9YSWinaozMovG6kQ==", url: "https://mmocgame.qpic.cn/wechatgame/uRnpa1JW3rTyYxQHVUI2OaUmHZStMSWfoXPpx7AgceIN2EuqE2DRicDNjcBTA7arK/0", }, { id: "adU43/q3Te+86ThFH+8R+g==", url: "https://mmocgame.qpic.cn/wechatgame/fVu8XV4rOQv0iaLzIr4m67DZAOgN1NDe7jSCDoT2ibHuqRkacaeHCdCopIgLzrlBibR/0", }, { id: "k93MB1OQQzGuHDv6LhlJ4g==", url: "https://mmocgame.qpic.cn/wechatgame/rrYFeia8mywog7QfGagj9Uiad5Sicu3qNhV6IQcgVkZbUjibaWe70SUsvp9vNESBpje7/0", }, { id: "/ry07TA6SXea+AoABH1D+w==", url: "https://mmocgame.qpic.cn/wechatgame/f0cXVicm8xoT33Txqf2o2CRyreAicOiaHh8JFlbxHaDibYWZoBulHTF9v1s3EaUWfaMk/0", }, { id: "hYrwZorvQaOP3XbbC77PZw==", url: "https://mmocgame.qpic.cn/wechatgame/HEsiaI4wLnb2SVCthB5pZeBULvWsk71EdlK1WUXic23cPuzeWribbjibjlebOPyNy1wL/0", }, { id: "nzn7R/iLQoerxHhYbEM6AQ==", url: "https://mmocgame.qpic.cn/wechatgame/fxaAdTaO5GvRicwozj7sfUiat1ef3XLgjicLLZpeJYWtjyBjIhfh7TP2aZzOItwlpff/0", }, { id: "RvJk1ZZzR1iwqKvI39Rt8w==", url: "https://mmocgame.qpic.cn/wechatgame/WibiboKxDQsGxnVMhxebwvouMGnn5MKJibF18lS1iaibo1yrWnoTJgPAIgVX3dZEkV0Ta/0", }, { id: "6OgcDWd5SI2R2SmnOxs3Gw==", url: "https://mmocgame.qpic.cn/wechatgame/bpd6RQyPEB7xsoqyzribiaGnibELo6xARRPSLsgtickwcMHtSv920nweBbxIG7OiaJXFo/0", }, { id: "6qb2SmFBRgi3pv+pUIbulA==", url: "https://mmocgame.qpic.cn/wechatgame/LXCSUXdVagducqPcChicS5yQWqna7oduKCnzwlG11a7W1Lx6Rwv4Y1tBsMVWqP4Fs/0", }, { id: "rdrtaMpJTd6CtMI3dJikHg==", url: "https://mmocgame.qpic.cn/wechatgame/Zzc9s1q36erWTkUxLDjqOus62PTTysBW4PGUaDO5Pr67kT3g9W3HlMakBSiaicxGdH/0", }, { id: "sflrnBurRxC2dow0iuQNEg==", url: "https://mmocgame.qpic.cn/wechatgame/YiacDpfxzCGbXUHmtMmcfr8gIF7DicDib6q0pJaiaWXbTWOBGkCbpeuMic1SMgr91v43K/0", }, { id: "GkB88GpmR6KvjrV3yMxeWA==", url: "https://mmocgame.qpic.cn/wechatgame/f4fzfIKfgFIBFWxjsFibMUHKQA72JutALOXbuM3vaS0W9ZSUjC2rysb5Tic23lQb95/0", }, { id: "UxAhraIxTayr/3Mdhi0Uzg==", url: "https://mmocgame.qpic.cn/wechatgame/qDv24VqH6NBBP0IXNJ2EbSScIic6WsX0KcLJSNs1ThibYJx6QnDnKIT59CcIQSnZvD/0", }, { id: "ISSkaxiBRhyn3yZh2AS0eQ==", url: "https://mmocgame.qpic.cn/wechatgame/22HxqYDEUu1yelwdMR30ntjn6rzaYf8QJgrOkFlteicoqbacSptHiaNgK7cygteg99/0", }, { id: "m0GQ8b4YTU2u1So1Wr9Rjg==", url: "https://mmocgame.qpic.cn/wechatgame/D8nvAYkIticAEYwTBb3uC83TVferTkpqU5Akj8XGwPCYfNZibTeunZVd5ticqHxvgHC/0", }, { id: "F6j57H82QyyiD1i0MaS+0g==", url: "https://mmocgame.qpic.cn/wechatgame/FtniagLR3ueTRx3ibhy98G6pGdC69A38n9jUrVFHEhL9gqceaUnaTpmQHkiaPU1JE4h/0", }, { id: "dqd9Gfx2QGKilvChFwoc7Q==", url: "https://mmocgame.qpic.cn/wechatgame/yauvGchcicTl0zx4dYqfhAxl40k7ZbVM59VbPjDPcouesWbPrpsFQzNvfsSUYwUkb/0", }, ]; //分享文本 private ShareTextAry = [ "话术策略大挑战:十句话让 AI 二次元少女心动!", "心动话术挑战,60 位 AI 女友候选等你 Pick!", "二次元话术相亲模拟!60 位 AI 对象等你攻略!", "全 AI 聊天互动!收集二次元少女的心动信号!", "首款 AI 话术策略游戏,攻略个性 AI 二次元女友!", "锻炼你的话术策略,挑战 AI 女友最速结婚路线!", "直男 or 情话海王?60 位 AI 女友检测话术段位!", "高能话术挑战 60 位 AI 少女,解锁专属甜蜜结局!", ]; //分享信息 shareInfo() { let rand1 = Utils.getRandomInt(0, this.SharePicAry.length - 1); let picmap = this.SharePicAry[rand1]; let rand2 = Utils.getRandomInt(0, this.ShareTextAry.length - 1); let text = this.ShareTextAry[rand2]; logger.log("分享:", rand1, rand2); return { title: text, query: "ShareCode=" + "user_default", //ModelPlayer.I.getPlayerId(), imageUrl: picmap.url, imageUrlId: picmap.id, }; } //主动拉起分享 show_share(rewardCB?: Function) { logger.log("主动拉起分享"); let info: any = this.shareInfo(); info.succ = rewardCB; info.fail = null; this.ShareCb = info; window["wx"].shareAppMessage(info); } //获取设备分辨率 getWindowSize() { let windowinfo = window["wx"].getWindowInfo(); return { width: windowinfo.screenWidth, height: windowinfo.screenHeight }; } //显示游戏圈 show_gameClub(leftRatio, topRatio, widthRatio, heightRatio) { logger.log("显示游戏圈"); if (this.wx_gameClub) { this.wx_gameClub.show(); } else { let windowinfo = window["wx"].getWindowInfo(); let x = windowinfo.screenWidth * leftRatio; let y = windowinfo.screenHeight * topRatio; let w = windowinfo.screenWidth * widthRatio; //按钮宽高 let h = windowinfo.screenHeight * heightRatio; logger.log( "游戏圈按钮配置:", windowinfo, leftRatio, topRatio, widthRatio, heightRatio, x, y, w, h ); this.wx_gameClub = window["wx"].createGameClubButton({ type: "string", text: "", // type: 'image', icon: "green", style: { left: x, //这个坐标对应UI上的按钮时,按钮要勾选适配 top: y, width: w, height: h, }, }); } } //隐藏游戏圈 hide_gameClub() { logger.log("隐藏游戏圈"); if (this.wx_gameClub) { this.wx_gameClub.hide(); } } //region base64音频播放 //检查是否支持base64音频播放 checkSupportBase64Audio() { return true; } //播放base64音频 private _innerAudioContext: any = null; private _iacIdx = 0; //音频播放索引 playBase64Audio(base64, loop) { if (!this.checkSupportBase64Audio()) { logger.log("微信平台不支持base64音频播放"); return; } let substring = base64; let qianzhui = "data:audio/x-wav;base64,"; if (base64.startsWith(qianzhui)) { substring = base64.substring(qianzhui.length, base64.length); } let self = this; const fs = window["wx"].getFileSystemManager(); //1.删除上一个音频 const lastPath = window["wx"].env.USER_DATA_PATH + `/ordernew${self._iacIdx}.mp3`; logger.log("微信 正在删除上一个音频 ->", lastPath); fs.removeSavedFile({ filePath: lastPath, success(res) { logger.log("微信 删除上一个音频成功", res); }, fail(err) { logger.log("微信 删除上一个音频失败", err); }, complete(res) { logger.log("微信 删除上一个音频完成", res); //2.保存当前音频 //这里需要每次保存时换一下名字的原因是:innerAudioContext设置路径时如果路径相同,会认为还是同一个音频,不会重新加载,所以需要每次保存时换一下名字 self._iacIdx++; const audioPath = window["wx"].env.USER_DATA_PATH + `/ordernew${self._iacIdx}.mp3`; logger.log("微信 正在保存本次音频 ->", audioPath); fs.writeFile({ filePath: audioPath, data: substring, encoding: "base64", success(res) { if (self._innerAudioContext == null) { self._innerAudioContext = window["wx"].createInnerAudioContext(); // 添加播放结束的回调 self._innerAudioContext.onEnded(() => { logger.log("微信 AI语音播放结束"); self._innerAudioContext.stop(); // 使用 stop 方法停止音频并重置播放状态 self._innerAudioContext.destroy(); // 销毁音频实例 self._innerAudioContext = null; }); } logger.log("微信 播放base64音频", audioPath); self._innerAudioContext.src = audioPath; self._innerAudioContext.play(); // 开始播放音频 }, fail(err) { logger.log("微信 保存本次音频失败", err); }, }); }, }); } //region版本更新检测 //微信开发者工具上可以通过「编译模式」下的「下次编译模拟更新」开关来调试 qiangzhiUpdata() { const updateManager = window["wx"].getUpdateManager(); //监听向微信后台请求检查更新结果事件。微信在小程序每次启动(包括热启动)时自动检查更新,不需由开发者主动触发。 updateManager.onCheckForUpdate((res) => { // 请求完新版本信息的回调 logger.log("微信 检查是否有新版本:", res.hasUpdate); }); //监听小程序有版本更新事件。客户端主动触发下载(无需开发者触发),下载成功后回调 updateManager.onUpdateReady(function () { window["wx"].showModal({ title: "更新提示", content: "新版本已经准备好,是否重启应用?", success: function (res) { if (res.confirm) { // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启 updateManager.applyUpdate(); } }, }); }); //监听小程序更新失败事件。小程序有新版本,客户端主动触发下载(无需开发者触发),下载失败(可能是网络原因等)时回调 updateManager.onUpdateFailed(function (err) { logger.log("微信 新版本下载失败", err); }); } //客服功能是否支持 kefuSupport() { if (window["wx"].openCustomerServiceConversation) { return true; } logger.log("微信 不支持联系客服"); return false; } //进入联系客服 openKefu() { let wx = window["wx"]; if (wx) { if (!wx.openCustomerServiceConversation) { return; } wx.openCustomerServiceConversation({ success: (res) => { const { path, query } = res; logger.log("微信 进入客服成功", path, query); }, fail: (res) => { logger.log("微信 进入客服失败", res); }, }); } } //region 播放背景视频 private _bgVideo: any = null; //正式播放的视频组件 private _bgShow: boolean = false; private curPlayType: VideoRoleType = VideoRoleType.None; //当前播放的视频的类型 playBgAudio( remoteUrl: string, vtype: VideoRoleType, loop: boolean = false, extra: any = {} ) { if (this._bgVideo && this._bgShow) { this.playBgAudioNext(remoteUrl, vtype, loop, extra); return; } let self = this; logger.log("微信 播放背景视频组件1", remoteUrl); this.curPlayType = vtype; if (!this._bgVideo) { this._bgVideo = this.createVideoHandle(); // this._bgVideo.onPlay(() => { // logger.log("微信 背景视频播放开始"); // }) this._bgVideo.onTimeUpdate((_tinfo: any) => { // logger.log("微信 背景视频播放进度", self._bgShow, _tinfo); if (!self._bgShow) { if (_tinfo && _tinfo.position > 0.01) { logger.log("微信 背景视频1进入视野"); self.videoMoveIn(self._bgVideo); self._bgShow = true; self.removeBgAudioNext(); Utils.sendInnerMsg(InnerMsgCode.BgVideo_Ready, {}); } } }); this._bgVideo.onEnded(() => { if (self.doPlayEmoReadyAudio()) { self.setBgAudioPause(self._bgVideo); } Utils.sendInnerMsg(InnerMsgCode.BgVideo_End, {}); }); } this._bgVideo.src = remoteUrl; //视频的地址 this._bgVideo.loop = loop; //循环播放 this._bgVideo.play(); } removeBgAudio() { this._bgShow = false; if (this._bgVideo) { this._bgVideo.stop(); this.videoMoveOut(this._bgVideo); } } //播放下一个视频,先加载,播放后再转到正式组件上 private _bgTempVideo: any = null; //临时视频组件,等加载完成 private _bgTempShow: boolean = false; playBgAudioNext( remoteUrl: string, vtype: VideoRoleType, loop: boolean = false, extra: any = {} ) { this.removeBgAudioNext(); logger.log("微信 创建背景视频组件2--->", remoteUrl); this.curPlayType = vtype; let self = this; if (!this._bgTempVideo) { this._bgTempVideo = this.createVideoHandle(); // this._bgTempVideo.onPlay(() => { // logger.log("微信 临时背景视频播放开始"); // }) this._bgTempVideo.onTimeUpdate((_tinfo: any) => { // logger.log("微信 临时背景视频播放进度", self._bgTempShow, _tinfo); if (!self._bgTempShow) { if (_tinfo && _tinfo.position > 0.01) { logger.log("微信 背景视频2进入视野"); self._bgTempShow = true; self.videoMoveIn(self._bgTempVideo); self.removeBgAudio(); Utils.sendInnerMsg(InnerMsgCode.BgVideo_Ready, {}); } } }); this._bgTempVideo.onEnded(() => { if (self.doPlayEmoReadyAudio()) { self.setBgAudioPause(self._bgTempVideo); } Utils.sendInnerMsg(InnerMsgCode.BgVideo_End, {}); }); } this._bgTempVideo.src = remoteUrl; //视频的地址 this._bgTempVideo.loop = loop; //循环播放 this._bgTempVideo.play(); } removeBgAudioNext() { this._bgTempShow = false; if (this._bgTempVideo) { this._bgTempVideo.stop(); this.videoMoveOut(this._bgTempVideo); } } //region 播放emo视频 private _emoVideo: any = null; //正式播放的视频组件 private _emoShow: boolean = false; addEmoAudio( remoteUrl: string, vtype: VideoRoleType, loop: boolean = false, extra: any = {} ) { if (this._emoVideo && this._emoShow) { this.playEmoAudioNext(remoteUrl, vtype, loop, extra); return; } let self = this; logger.log("微信 播放emo视频1", remoteUrl); this.curPlayType = vtype; if (!this._emoVideo) { this._emoVideo = this.createVideoHandle(); // this._emoVideo.onPlay(() => { // logger.log("微信 背景视频播放开始"); // }) this._emoVideo.onTimeUpdate((_tinfo: any) => { // logger.log("微信 背景视频播放进度", self._emoShow, _tinfo); if (!self._emoShow) { if (_tinfo && _tinfo.position > 0.01) { logger.log("微信 emo视频1准备好了"); self._emoShow = true; self.removeEmoAudioNext(); self.setEmoReadyAudio(self._emoVideo); if (self.curPlayType == VideoRoleType.emo) { self.doPlayEmoReadyAudio(); } } } }); this._emoVideo.onEnded(() => { self.doEmoFinish(); }); } this._emoVideo.src = remoteUrl; //视频的地址 this._emoVideo.loop = loop; //循环播放 this._emoVideo.play(); } removeEmoAudio() { this._emoShow = false; if (this._emoVideo) { this._emoVideo.stop(); this.videoMoveOut(this._emoVideo); } } //播放下一个视频,先加载,播放后再转到正式组件上 private _emoTempVideo: any = null; //临时视频组件,等加载完成 private _emoTempShow: boolean = false; playEmoAudioNext( remoteUrl: string, vtype: VideoRoleType, loop: boolean = false, extra: any = {} ) { this.removeEmoAudioNext(); logger.log("微信 播放emo视频2--->", remoteUrl); this.curPlayType = vtype; let self = this; if (!this._emoTempVideo) { this._emoTempVideo = this.createVideoHandle(); // this._emoTempVideo.onPlay(() => { // logger.log("微信 临时背景视频播放开始"); // }) this._emoTempVideo.onTimeUpdate((_tinfo: any) => { // logger.log("微信 临时背景视频播放进度", self._emoTempShow, _tinfo); if (!self._emoTempShow) { if (_tinfo && _tinfo.position > 0.01) { logger.log("微信 emo视频2已准备好"); self._emoTempShow = true; self.removeEmoAudio(); self.setEmoReadyAudio(self._emoTempVideo); if (self.curPlayType == VideoRoleType.emo) { self.doPlayEmoReadyAudio(); } } } }); this._emoTempVideo.onEnded(() => { self.doEmoFinish(); }); } this._emoTempVideo.src = remoteUrl; //视频的地址 this._emoTempVideo.loop = loop; //循环播放 this._emoTempVideo.play(); } removeEmoAudioNext() { this._emoTempShow = false; if (this._emoTempVideo) { this._emoTempVideo.stop(); this.videoMoveOut(this._emoTempVideo); } } //视频移入屏幕 private videoMoveIn(video: any) { let adainfo = this.getVideoAdaInfo(); video.x = adainfo.x; video.y = adainfo.y; } //视频移出屏幕 private videoMoveOut(video: any) { video.x = 10000; video.y = 10000; } /**创建一个视频播放器 */ private createVideoHandle() { let size = this.getWindowSize(); let adainfo = this.getVideoAdaInfo(); let bgVideo = window["wx"].createVideo({ // src: remoteUrl, //视频的地址 x: size.width, //先在屏幕外创建,等加载完成后再移动到屏幕上 y: size.height, width: this.videoWidth * adainfo.scale, //视频的宽度 height: this.videoHeight * adainfo.scale, //视频的高度 autoplay: true, //自动播放 // loop: loop, //循环播放 controls: false, //是否显示控件 showProgress: false, //显示进度条 showProgressInControlMode: false, //在控制模式下显示进度条 enableProgressGesture: false, //是否启用进度手势 showCenterPlayBtn: false, //是否显示中间的播放按钮 underGameView: true, //视频是否显示在游戏画布之下。需要设置Camera的Clear Color为透明色 // backgroundColor: "#00000000", //视频背景颜色 objectFit: "fill", //视频的填充模式 }); return bgVideo; } //获取视频适配信息 private videoWidth = 720; private videoHeight = 1280; private videoAdaInfo = null; private getVideoAdaInfo() { if (this.videoAdaInfo) return this.videoAdaInfo; this.videoAdaInfo = { x: 0, y: 0, scale: 1, }; let size = this.getWindowSize(); let ratiow = size.width / this.videoWidth; //屏幕和视频的宽高比,谁大用谁 let ratioh = size.height / this.videoHeight; if (ratiow > ratioh) { this.videoAdaInfo.scale = ratiow; this.videoAdaInfo.x = 0; this.videoAdaInfo.y = -(this.videoHeight * ratiow - size.height) / 2; } else { this.videoAdaInfo.scale = ratioh; this.videoAdaInfo.x = -(this.videoWidth * ratioh - size.width) / 2; this.videoAdaInfo.y = 0; } logger.log("微信 视频适配信息", this.videoAdaInfo, size); return this.videoAdaInfo; } //设置暂停播放的主视频 private vpWait: any = null; setBgAudioPause(wait: any) { logger.log("微信 主视频暂停播放"); this.vpWait = wait; this.vpWait.pause(); } replayBgAudioPause() { logger.log("微信 主视频继续播放"); if (this.vpWait) { this.vpWait.play(); } } //设置准备好要播放的表情视频 private emoReady: any = null; setEmoReadyAudio(au: any) { logger.log("微信 设置emo ready视频"); if (this.emoReady) { this.emoReady.stop(); this.videoMoveOut(this.emoReady); } this.emoReady = au; this.emoReady.pause(); } //移除准备好要播放的表情视频 removeEmoReadyAudio() { logger.log("微信 移除emo ready视频"); if (this.emoReady) { this.emoReady.stop(); this.videoMoveOut(this.emoReady); } this.emoReady = null; } //播放准备好要播放的表情视频 doPlayEmoReadyAudio(): boolean { if (this.emoReady) { logger.log("微信 播放emo ready视频"); this.emoReady.play(); this.videoMoveIn(this.emoReady); return true; } return false; } //表情视频播放结束 doEmoFinish() { logger.log("微信emo ready视频播放结束"); this.removeEmoReadyAudio(); this.replayBgAudioPause(); } //region 微信同声传译 // private rrmgr: any = null; // startRecordRecognition() { // logger.log("微信 同声传译111") // if (!this.rrmgr) { // const plugin = requirePlugin("WechatSI"); // this.rrmgr = plugin.getRecordRecognitionManager(); // logger.log("微信 同声传译222") // // 监听识别结果 // this.rrmgr.onRecognize = (res) => { // logger.log("微信 同声传译识别结果:", res.result); // }; // // 监听录音结束 // this.rrmgr.onStop = (res) => { // logger.log("微信 同声传译录音结束", res); // }; // } // this.rrmgr.start({ lang: "zh_CN" }); // logger.log("微信 同声传译333") // } // stopRecordRecognition() { // if (this.rrmgr) { // this.rrmgr.stop(); // logger.log("微信 同声传译444") // } // } //region 复制到剪贴板 /**复制文本到剪贴板 */ copyToClipboard(text: string, cb?: Function) { logger.log("微信 复制到剪贴板:", text); window["wx"].setClipboardData({ data: text, success: () => { logger.log("微信 复制成功"); cb && cb(true); }, fail: (err) => { logger.log("微信 复制失败:", err); cb && cb(false); }, }); } //region 友盟+ //初始化友盟+ umaInit() { // window["wx"].uma.init({ // appKey: "67c969b99a16fe6dcd5bfec5", // useOpenid: true, // default true // autoGetOpenid: true, // debug: true, // uploadUserInfo: true, // 上传用户信息,上传后可以看到有用户头像和昵称的分享信息 // }); // logger.log("微信 uma 初始化"); } //友盟统计是否开启 umaSwt() { return true; } //友盟事件统计 umaEvent(eventName: string, value: any = {}) { window["wx"].uma.trackEvent(eventName, value); logger.log("微信 uma 统计:", eventName, value); } }