RES.addEventListener(RES.ResourceEvent.CONFIG_COMPLETE, this.onConfigComplete, this);
RES.addEventListener(RES.ResourceEvent.CONFIG_LOAD_ERROR, this.onConfigError, this);
RES.loadConfig("resource/default.res.json", "resource/");
上面的是egret的代码,在通过wing打包以后进行了资源路径的转换,转换后的代码
RES.addEventListener(RES.ResourceEvent.CONFIG_COMPLETE, this.onConfigComplete, this);
RES.addEventListener(RES.ResourceEvent.CONFIG_LOAD_ERROR, this.onConfigError, this);
RES.loadConfig("GameRes://resource/default.res.json", "GameRes://resource/");
上面的方式本身是没有问题的,但是通过上面的的事件捕获发现加载错误,通过跟踪发现是路径的问题,在解决方法就是在assetsmanager.js
文件中TextProcessor
processor_1.TextProcessor = {
onLoadStart: function (host, resource) {
var request = new egret.HttpRequest();
request.responseType = egret.HttpResponseType.TEXT;
if( resource.url.indexOf('GameRes') == 0 ){
request.open(resource.url, "get");
}else{
request.open(RES.getVirtualUrl(resource.root + resource.url), "get");
}
request.send();
return promisify(request, resource);
// let text = await promisify(request, resource);
// return text;
},
onRemoveStart: function (host, resource) {
return true;
}
};
简单来说就是在文本类型的文件加载中,有的需要拼接GameRes://
前缀,有的是不需要的。而统一的加或者不加都是不正确的,所以需要通过判断来处理。
本身我们的游戏是横屏的,而启动的时候默认是竖屏的。该问题的修改方法是配置gameConfig.json
{
"viewMode":2,
"enterUrl":""
}
1.竖屏 2.左横屏(home键在左边)3.右横屏(home键在右边)
H5游戏入口url H5游戏填写,非H5游戏不填
另外在修改以后,需要清理缓存以后修改才能生效,或者说用其他的账号登陆手机QQ重新启动游戏,前提是没有安装过这个游戏的QQ号码。
视频广告的接入按理来说是一个十分简单的事情,但是如果你掉进了坑里那就很惨了。
var videoAd = BK.Advertisement.createVideoAd();
videoAd.onLoad(function () {
//加载成功
BK.Script.log(1,1,"onLoad")
});
videoAd.onPlayStart(function () {
//开始播放
BK.Script.log(1,1,"onPlayStart")
});
videoAd.onPlayFinish(function () {
//播放结束
BK.Script.log(1,1,"onPlayFinish")
});
videoAd.onError(function (err) {
//加载失败
BK.Script.log(1,1,"onError code:"+err.code+" msg:"+err.msg);
});
videoAd.show();
如果你按照官方给的demo去接的话,恭喜你入坑了。这个api是旧的,是无法拉取广告的,并且不会提示任何的错误信息。所以在接入广告之前先获取最新的qqPlayCore.js
文件。
qqPlayCore.js下载地址
同样给出正确的拉取视频奖励广告的方法:
BK.Advertisement.fetchVideoAd(1 /* resultPage */, function (retCode, msg, handle) {
if (retCode == 0) {
updateTxt("拉取视频广告成功!");
handle.setEventCallack(function (code, msg) {
BK.Script.log(1, 1, "closeGame"); //关闭游戏
updateTxt("关闭游戏");
}.bind(this), function (code, msg) {
//code ==0
BK.Script.log(1, 1, "endVide code:" + code + " msg:" + msg); //视频结束
updateTxt("视频播放结束");
}.bind(this), function (code, msg) {
//code ==0
updateTxt("关闭视频webview");
BK.Script.log(1, 1, "endVide code:" + code + " msg:" + msg); //关闭视频webview
}.bind(this), function (code, msg) {
//code ==0
updateTxt("开始播放视频");
BK.Script.log(1, 1, "endVide code:" + code + " msg:" + msg); //开始播放视频
}.bind(this));
//跳转至播放界面
handle.jump();
}
else {
updateTxt("拉取视频广告失败" + "error:" + retCode + " msg:" + msg);
BK.Script.log(1, 1, "error:" + retCode + " msg:" + msg);
}
}.bind(this));
拉取banner广告的方法:
BK.Advertisement.fetchBannerAd(function (retCode, msg, adBannerHandle) {
if (retCode == 0) {
//2.开发者 使用adBannerHanlde
//2.1 决定是否展示
adBannerHandle.show(function (succCode, msg, handle) {
if (succCode == 0) {
//
}
else {
BK.Script.log(1, 1, "展示失败 msg:" + msg);
}
});
//2.2 开发者主动关闭广告。
//adBannerHandle.close();
//2.3 开发者监听事件
adBannerHandle.onClickContent(function () {
//用户点击了落地页
});
adBannerHandle.onClickClose(function () {
//用户点击了X关闭广告
});
}
else {
BK.Script.log(1, 1, "fetchBannerAd failed. retCode:" + retCode);
}
}.bind(this));
另外在开发调试的过程中习惯使用try...catch...
方法捕获报错,方便快速的定位问题。
原文链接:http://www.bennyxu.com/index.php/egret/2018/10/25/1070.html