【Cocos Creator 常见问题归纳】第四期

往期记录

【CocosCreator常见问题归纳】第一期
【CocosCreator常见问题归纳】第二期
【CocosCreator常见问题归纳】第三期


部分PR周知:

1、2.0.10微信小游戏在IOS设备上audio组件有bug

PR: https://github.com/cocos-creator-packages/weapp-adapter/pull/102

2、Cocos Creator 2.1.2 UC浏览器电脑版上无法正常运行

PR: https://github.com/cocos-creator/engine/pull/5048

3、Windows平台,label问题太严重了,内存不释放

PR: https://github.com/cocos-creator/cocos2d-x-lite/pull/1783,

4、打包成 vivo 小游戏后 cc.audioEngine.AudioState 属性丢失

A:替换下 builtin\vivo-runtime\res\jsb-adapter\engine\jsb-audio.js 文件jsb-audio.zip

5、EditBox的string属性赋值为数值型数据后出现异常

PR: https://github.com/cocos-creator/engine/pull/5088/commits/4c7670faf249c380dff8a17a8d6b46107907841e

6、 label的string为null或undefined时报错

PR: https://github.com/cocos-creator/engine/pull/4644


常见问题:

1、2.0版本scrollView事件类型求助

A: 由于2.0对事件系统进行了修改,事件系统现在只会对于用户输入的touch、mouse等事件抛出event对象。
scrollView节点监听的scrollview滚动事件则会抛出事件target,
所以在新版本你的方式需要做一下改变。
https://docs.cocos.com/creator/manual/zh/release-notes/upgrade-guide-v2.0.html#34-事件系统升级
这个文档解释了,为什么会这样。

2、2.1.1 3d模式的一个严重bug

Q: 当多个平面(包括精灵转3d,plane,还有box的z轴scale0.1)叠在一起而y旋转角度不同时,
平面间的绘图顺序会出现问题,类似于ps的图层一样,最后放置的物体会显示在最前,
无视空间前后关系


A: 你的 tree 用的是 sprite + 2d 的材质,没有打开深度测试,改为 plane + unlit 材质 并且 打开 alpha test 试下

3、Cocos 2.0.7版本 开启的时候报错

A: 电脑有没有其它creator?
试着把电脑上所有的creator卸载,再装你需要的版本

4、 editor 输入框无法限制输入E或e字符

A: 原因是e在数学中同样是具有数值的,所以判断他为number没有问题。
所以这不是引擎的问题。
这应该是Html5开发过程中都会遇到的问题。
在Html5中,我们可以修改input标签为如下

<input type="text" name="" oninput="this.value=this.value.replace(/[^0-9.]+/,'');" />

Cocos Creator 中我们需要自己修改引擎代码。
找到WebEditBoxImpl.js 如下图所示位置,加入红框代码。
之后编译引擎即可。

5、插件怎么监听键盘事件?

A: 可以参考electron相关文档
https://github.com/amhoho/electron-cn-docs/blob/master/tutorial/keyboard-shortcuts.md#browserwindow中的快捷键

6、IOS上依然无法正确显示TTF字体

Q: TTF字体:https://forum.cocos.com/uploads/default/original/3X/7/f/7fea8265c9d36849d0d1e99b0f0d085521a63026.zip
A:ArialRoundedMTBold这个字体本身就是系统字体,直接使用就行。
系统字体本身就已经注册过,如果使用ttf的话,注册字体的时候就会不成功,这样就直接走失败的回调,会使用默认字体替代。
解决方案:
修改Label组件为如下所示

7、使用Scheduler定时器报错

Q: error:cc.Scheduler: Illegal target which doesn’t have uuid or instanceId

A: 方案:
cc.director.getScheduler().enableForTarget(this);
cc.director.getScheduler().schedule(this.heartBeat,this,1,false);
参考:在对象没有 instanceId 的情况下, 使用这个enableForTarget来保证给对象提供一个唯一的instanceId。
这个可以参考API文档:
https://docs.cocos.com/creator/api/zh/classes/Scheduler.html#enablefortarget
或者查阅引擎源码

3赞

想问2.1.2的版本的EditBox能不能在内容为空的情况下不显示占位符,光标一放在输入框上面便不显示占位符,当我移走光标且没有内容时再显示占位符。我改了引擎的代码也没有起作用,只要我的输入内容为空,无论我是将占位符的label隐藏还是将占位符的string属性set为空字符串又或者是我讲占位符label的透明度设置为0都是无效的。

这个后来您解决了吗?我遇到同样的问题