解决步骤
前提
A: 宿主页面,2.1.3开发。
B: 弹出层WebView页面。
- 首先和其他处理一样,把背景变成透明。
- 不同的是我们弹出层是WebView,也就是iframe。
- iframe内的B页面如果用webgl就会出现上述透明度混合问题。
- 既然这是个无法规避的问题,换个思维,Canvas渲染本质上是软渲和div等html元素一致,是否可以用canvas渲染模式?
- creator 2.x已经不支持canvas,所以B项目退回到1.9.x开发,使用canvas模式打包。
- 问题依旧,调试引擎代码内部断点显示还是webgl代码!!
/**** creator 1.9.2 ***/
function _determineRenderType(config) {
var CONFIG_KEY = cc.game.CONFIG_KEY, userRenderMode = parseInt(config[CONFIG_KEY.renderMode]) || 0;
(isNaN(userRenderMode) || userRenderMode > 2 || userRenderMode < 0) && (config[CONFIG_KEY.renderMode] = 0);
cc._renderType = cc.game.RENDER_TYPE_CANVAS;
cc._supportRender = true;
if (0 === userRenderMode) {
if (cc.sys.capabilities["opengl"]) {
cc._renderType = cc.game.RENDER_TYPE_WEBGL;
cc._supportRender = true;
} else if (cc.sys.capabilities["canvas"]) {
cc._renderType = cc.game.RENDER_TYPE_CANVAS;
cc._supportRender = true;
}
} else if (1 === userRenderMode && cc.sys.capabilities["canvas"]) {
cc._renderType = cc.game.RENDER_TYPE_CANVAS;
cc._supportRender = true;
} else if (2 === userRenderMode && cc.sys.capabilities["opengl"]) {
cc._renderType = cc.game.RENDER_TYPE_WEBGL;
cc._supportRender = true;
}
cc._renderType = cc.game.RENDER_TYPE_WEBGL; // !!!!!!!!!
cc._supportRender = true;
}
- 最后采用下面处理,在main.xxx.js里面 boot方法内执行
Object.defineProperty(cc, '_renderType', {
configurable: false,
get: function() {
return 0; // canvas
}
});
done