背景
最近在开发微信小游戏的时候遇到了一个首屏加载出现cocos logo问题,网络上的解决方案非常少,于是查看cocos转换微信小程序的代码得到了下面的流程去除logo
第一步
首先在构建发布页面,如下图
打开显示如下,将最小显示时间设置为0,logo显示比例设置为0,是否显示cocos水印钩除:
然后发布,运行:
接下来运行的时候我们发现,首屏logo不展示了,但是出现一个黑屏展示logo的问题
然后我们打开下面打包目录:
使用vscode打开项目代码,根据game.js下面的代码可以看到启动方法是在fist-sceen.js中,找到fist-sceen中的start函数:
可以看到这里的start函数返回了加载一个图片,并执行添加材质和进度条的方法:
我们将start函数改写成:
...省略
function tick() {
rafHandle = requestAnimationFrame(() => {
// draw(); // 注释掉着色器绘制方法,因为进度条的绘制是通过着色器绘制的,咱们把返回替换掉会导致此方法报错
tick();
if (afterTick) {
afterTick();
afterTick = null;
}
});
}
...省略
function start(alpha, antialias) {
options.alpha = alpha === 'true' ? true : false;
options.antialias = antialias === 'false' ? false : true;
gl = window.canvas.getContext("webgl", options);
initVertexBuffer();
initProgressVertexBuffer();
initTexture();
// program = initShaders(VS_LOGO, FS_LOGO);
// programProgress = initShaders(VS_PROGRESSBAR, FS_PROGRESSBAR);
// initShaders函数用于创建着色器程序。
// loadShader函数用于加载和编译着色器代码进度条,所以咱们注释掉
tick();
// return loadImage('splash.png').then(() => {
// updateVertexBuffer();
// updateTexture();
// return setProgress(0);
// });
//替换为下面的函数返回
return new Promise((resolve, reject) => {
afterTick = () => {
resolve();
};
});
}