我自己封装个激励视频的方法
可是却有一个问题,比如 我先调A用该方法,得到正确的adClose回调结果
当我在之后的逻辑B处再调用该方法时,A的回调也会被执行 请问 onClose 是有一个回调队列吗?
看文档有一个 offClose方法, 可是onClose使用的是匿名函数, 我该如何offClose?
或者说 为什么 onClose要是一个回调队列?
我的方法如下:
// 创建视频广告 public CreateRewardedVideoAd(id:string, adClose:(end:boolean,param:any)=>void,param:any,thisObj:any) :void { if (cc.sys.platform == cc.sys.WECHAT_GAME) { if (id== "" ) { if (adClose!= null ) { adClose.call(thisObj, true ,param); } return ; } if ( this .rewardedVideoAd== null ) { this .rewardedVideoAd = wx.createRewardedVideoAd({ adUnitId: id, }); } var self = this ; if ( this .rewardedVideoAd== null || this .rewardedVideoAd == undefined) { if (adClose!= null ) { adClose.call(thisObj, false ,param); } return ; } // 设置事件回调 this .rewardedVideoAd.onClose(res => { // 用户点击了【关闭广告】按钮 // 小于 2.1.0 的基础库版本,res 是一个 undefined console.log( "VideoAd: " + res); if (res && res.isEnded || res === undefined) { // 正常播放结束,可以下发游戏奖励 if (adClose!= null ) { adClose.call(thisObj, true ,param); } } else { // 播放中途退出,不下发游戏奖励 if (adClose!= null ) { adClose.call(thisObj, false ,param); } } }); this .rewardedVideoAd.load() .then(() => self.rewardedVideoAd.show()) . catch (err => console.log(err.errMsg)); } else { if (adClose!= null ) { adClose.call(thisObj, true ,param); } } } |
昂,我也遇到过这个问题,视频的回调就如同一条链式的,每onClose一次,就给加上了一个……
A的可以先offcolse 空的实体函数,再监听B的。可以避免同时回调的问题,设计的广告回调用着就是不方便
谢谢,我已经使用该方法解决了问题 但是这个API的设计真的叫人看不懂呀
你好楼主,offcolse这个方法要怎么调用呢
像下面这样调用
// 设置关闭事件回调
this.rewardedVideoAd.onClose(res => {
if(self.rewardedVideoAd==null) return;
self.rewardedVideoAd.offClose();
//...........
});
不好意思,好久没有登录 回答有点 晚了