前言
总结一下使用cocos开发遇到的坑,不定期更新。
问题汇总
代码修改Position坐标不生效
首先要通过打log或者断点排除下是不是逻辑上的问题,还有是不是有动画相关把位置修改了。我遇到的问题是坐标修改被widget组件覆盖了。
纹理压缩包体变大
cocos 的压缩纹理是这样子的,如果你选择的压缩纹理配置了好几个格式,比如这里ASTC、PVR、PNG等,那么最终会有这几份压缩纹理文件,在加载的时候,Cocos 会根据设备的实际情况,加载里面其中一份,比如Android上可能会优先 ASTC,但是只是优先,iOS 上可能会优先加载PVR,但是只是优先,不管如何,这样子的做法,都是为了让设备加载最合适的纹理,以达到性能最优,在达到性能最优的这个目的前提下,多准备一些压缩纹理是没错的,但这个确实是会导致包体大一点。解决办法?比如你是做Android手游的,那么其实只需要再压缩纹理配置中,选择ASTC就可以了(因为ASTC的市场份额可以达到99%的设备都能加载),其他格式的压缩纹理可以全部删除,这样子就可以解决包体过大。
目前做的是web项目,所以只保留了PNG压缩,以保证包体大小。
IOS上WEB无法播放音频
多半是音频格式导致的,我为了减小包体用的ogg格式,PC和Android上都正常,只有IOS上测试没有声音。把音频资源改为wav格式解决,MP3格式也可以。
IOS上不显示UI和图片
检查目标的Z值。虽然是2D模式但是Z也可以被修改。
IOS上无法使用OpenUrl打开网页
我用node.on的touch start监听的点击事件,点击事件能被触发但是没有打开链接。解决方案有两种:第一种是将挂载跳转的脚本直接放在Canvas下面,第二种是通过Button组件调用。
location.href=url
也是打开网页并且没有上述问题,但是它在安卓和PC上是覆盖打开,不是打开新窗口。
代码修改color的值没有生效
不能用比如xx.color.a = 1的方式修改,得用color = newColor的写法才能触发刷新颜色表现。
3.8版本代码使用Tween修改Sprite的color中的a没有生效
看论坛有很多人遇到过,改用UIOpacity组件控制透明度即可。
物理碰撞效果未生效
两个物体必须都有碰撞器collider(不是触发器,不勾选sensor)和刚体rigidbody,刚体rigidbody的Type为dynamic,如果不需要推动效果可以设置为静态。还要注意两个collider的group之间是不是有物理检测的。
如果只有第一次碰撞有物理效果,之后会直接穿过去,那么需要取消勾选rigidbody上的AllowSleep。
打完包后resources.load路径无法找到文件资源报错,在cocos编辑器内预览功能正常
我是为了便捷通过Function.name
来当作文件路径的一部分,通过log发现打包之后Function.name
都变成了e,编辑器内则是正确的名称。怀疑是打包操作引擎对代码做了混淆,把使用了Function.name
的部分直接改为字符串解决。
Widget组件适配失效
检查后发现是game.pause()导致的,找到的解决方案是执行2次 game.step()。