往期记录:
【CocosCreator常见问题归纳】第一期
【CocosCreator常见问题归纳】第二期
部分PR周知:
1、cocos creator 旋转 3d节点时 万向节死锁问题
PR: https://github.com/cocos-creator/engine/commit/581ef383593051ce1ed3c8c29a9ab5f10f4bead1
2、修复spine使用多皮肤,在cache mode下不显示的问题
3、2.0.10 Label 较 2.0.9 卡顿
PR: https://github.com/cocos-creator/cocos2d-x-lite/pull/1765
4、修复 cc.tween 的值为 0 时可能无效果的问题
5、 2.1.1用射线检测基础3D物体(长方体),检测距离会被缩放值影响
6、 bmfont内存泄漏
7、 Cocos Creator 2.0.9 ttf字体导致iOS设备上内存泄漏问题
PR: https://github.com/cocos-creator/cocos2d-x-lite/pull/1752
8、 creator 2.09 微信小游戏上背景音乐无法关闭
9、 spine通过JSB调原生函数BUG
PR: https://github.com/cocos-creator/cocos2d-x-lite/pull/1754
10、 spine通过JSB调原生函数BUG
PR: https://github.com/cocos-creator/cocos2d-x-lite/pull/1754
11、 网络图片多次加载失败后loadResArray无回调
PR: https://github.com/cocos-creator/engine/pull/4501
https://github.com/cocos-creator-packages/weapp-adapter/pull/96
12、 2.0.10 字体显示异常 系统字体Arial,在模拟器显示忽大忽小
PR: https://github.com/cocos-creator/cocos2d-x-lite/pull/1766
13、 creator h5音效静音问题
14、 微信小游戏下加载大文件json ios直接闪退
PR: https://github.com/cocos-creator-packages/weapp-adapter/pull/101
15、UI加了BlockInputEvents后还是吃事件
PR: https://github.com/cocos-creator/engine/pull/4522
https://github.com/cocos-creator/engine/pull/4710
2.0.10:https://github.com/cocos-creator/engine/pull/4653/files
常见问题:
1、2.1.1 动态修改material 贴图
A: 材质贴图接收的是cc.Texture2D对象,所以我们可以自己添加在属性面板一个cc.Texture2D对象。
spriteFrame也能够获取到它的texture2d :
spriteFrame.getTexture()
有了贴图,我们直接调用材质系统的api修改贴图:
this.material.setProperty("diffuseTexture", this.goldTexture);
setProperty这个接口是可以修改材质上几乎所有属性的。
2、cocos H5 在 ios端getID 无法判断
A: 因为这两个平台的touchID本身就是不一样的,这个需要注意一下。
所以touchID并不能作为多点触控的序号标识,
你应该获取
event.getTouches().length;
这个字段来检测触点数量
3、cocos creator 旋转 3d节点时 万向节死锁问题
4、 2.1.0 更新到 2.1.1 sprite.setState 不能使用
A: this.sprite.setMaterial(0, cc.Material.getBuiltinMaterial(‘gray-sprite’);
5、VIVO window.requestAnimFrame 未捕获的错误
A:
如果windows.requestAnimFrame没有初始化的话,就赋值为16。
6、按钮的点击事件失效
A: 这是2.0.10版本存在的缺陷,你需要在切换按钮的透明度之后再调用
节点的_onSiblingIndexChanged函数,根据arrivalOrder重新刷新场景渲染顺序。
你可以这样使用:
7、取消定时器失败,定时器仍然运行
A: 你好这个问题原因是this.unschedule(callback, target)是需要两个参数来指定需要暂停的定时器对象。
callBack 必须是与this.schedule中的回调一样,匿名函数不行。
target则是schedule的环境对象,这两个如有差异都不能正常停止schedule。
实现可以参考:
CCScheduler.js -> unschedule
8、如何在编辑器环境下,动态切换资源
A: 你好这个需求现在有下面的方案:
在编辑器环境中,cc.loader.loadRes 无法正常加载资源文件,请使用cc.loader.load();
目前cc.loader.load()只能加载到字体未解析的数据文件,目前引擎中未开放手动构造bitMapFont的接口,所以无法动态切换label字体,目前能做到的是动态切换精灵。
1、编辑器环境动态切换图片
Code:
var texture2DEnum = cc.Enum({
null: 0,
texture_one: 1,
texture_two: 2
});
cc.Class({
extends: cc.Sprite,
editor: {
disallowMultiple: true,
executeInEditMode: true,
menu: "自定义组件/自定义精灵组件",
},
properties: {
defaultSpriteFrameTexture2D: {
default: texture2DEnum.null,
type: texture2DEnum,
displayName: "图片精灵初始贴图枚举",
notify: function() {
this.onLoadTexture2DToSprite();
}
},
_oldDefaultTexture2D: null,
},
// LIFE-CYCLE CALLBACKS:
// onLoad () {},
start () {
this.onLoadTexture2DToSprite();
},
onLoadTexture2DToSprite () {
this.defaultTextureUrl = cc.url.raw(`resources/texture_${this.defaultSpriteFrameTexture2D}.jpg`);
if (this._oldDefaultTexture2D !== this.defaultTextureUrl) {
this._oldDefaultTexture2D = this.defaultTextureUrl;
if (this.defaultSpriteFrameTexture2D !== texture2DEnum.null) {
cc.loader.load(this.defaultTextureUrl, (err, resTexture2D)=> {
this.spriteFrame = null;
this.spriteFrame = new cc.SpriteFrame(resTexture2D);
});
}
else {
this.spriteFrame = null;
}
}
}
});
2、[quote=“guoyiweii, post:1, topic:78766”]
当策划拖动脚本到属性面板中时,希望有个默认值在,例如fnt或spritframe,就好像button有样,上来就有三图片,省得让策划每个脚本都要拖两遍
[/quote]
这个需求可以利用creator的控件库插件解:
将需要用到的prefab拉到控件库,下次使用的时候只要拖出来就行。
9、使用 cc.loader.loadRes加载cc.BufferAssets类型报错
A: 不好意思,2.0.x只支持加载binary,但识别为cc.Asset类型,只有在2.1以上编辑器才会将binary识别为BufferAsset
10、有什么方法可以获取Creator项目中的所有龙骨资源吗?
A:
Editor.assetdb.queryAssets('db://assets/**\\/*',['dragonbones','dragonbones-atlas'],function ( error, results ) {
});
11、Can’t find subpackage xxx
A: 请把项目构建发布之后测试。
web预览时无法生成分包信息。
12、 关于 videoPlayer 永远显示在最上面的问题
A: 参考这个帖子的方案,
https://forum.cocos.com/t/topic/68397
可以满足绝大多数浏览器需求。但是在安卓微信浏览器上则需要像下面这样做。
13、 挂载Animation组件的节点使用nodePool的问题
A: 目前引擎是这样设计的,回收到节点池时会移除节点注册的action动作,但是对于动画只会暂停而不会消除。
所以你需要自己在播放的时候处理一下每次都从头开始重新播放。
14、 2.1.1 LabelShadow IOS上无效
A: 目前暂不支持ios
15、 ScrollView嵌套EditBox,使用节点池复用EditBox出现的问题
A: 主要是这个接口导致的问题。
removeFromParent() 这个接口默认会清除节点的已注册的事件。
removeFromParent() 传入false 即可解决你的问题
16、cdn缓存问题
A: 这运营方面的问题,我们的解决方案是:manifaset 放 oss, 下载包 放 cdn 服务器。拿走不谢!这个问题也是坑了我们很久。
{“version”:“1.0055”,“packageUrl”:“http://cdn.xx.net/xx/fk10055",“remoteManifestUrl”:“http://osscdn.xx.net/xx/fk/project.manifest”,“remoteVersionUrl”:"http://osscdn.xx.net/xx/fk/version.manifest”}
也可以这样:
{“version”:“1.0055”,“packageUrl”:“http://cdn.xx.net/xx/fk10055",“remoteManifestUrl”:“http://osscdn.xx.net/xx/fk10055/project.manifest”,“remoteVersionUrl”:"http://osscdn.xx.net/xx/fk10055/version.manifest”} 代码取远程 manifest 时加上版本号自己拼,都放 cdn服务器。
17、Cocos Creator 物理引擎相关问题
A: 1、box2d弹力问题:
弹力属于特殊运动,物理系统在游戏生命周期内会不断计算刚体的状态和位置。目前可以通过降低物理系统的update回调传递的dt参数的精度来优化这个问题。
找到box2d.js中的这段代码,然后改一下红框部分的代码。
还有另外一种方案是开启一个计时器,判断多次回弹时每次幅度是否小于某个值(比如dt),然后再手动停止这个物体的弹跳。
2、3属于同类问题,开启gold刚体的摩擦力即可。
18、编辑器问题:经常打开工程就异常
A: https://www.weidown.com/xiazai/733.html
下载这个DLL修复工具使用试试
19、cc.url.raw获取的路径因平台而异?
A: 2、这是正常的,这个 API 只是简单的路径转换而已,不会考虑到文件类型。实际上 Creator 也没有任何 API 或文档要求用户直接使用 xxx.prefab 这样后缀的路径。你应该直接写 TestPrefab.json 如果你需要的话
(因为 Prefab 不是 raw asset,只有 raw asset 才能用 .raw。对普通的 asset 来说,无法保证能拿到这个 json,因为 json 可能会合并。)
20、2.0.2 IOS10 以下的没法跑啊
A:
根据今天最新的数据来看,iOS 9 占比已经非常小了。我们之前有尝试支持过,不过效果不佳,因此决定暂时放弃。之后我们会尽快在 iOS 上启用全新的 JS 引擎,这样就能避免造成平台割裂,到时有概率能支持 iOS 9