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

往期记录

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


部分PR周知:

1、cocos creator 旋转 3d节点时 万向节死锁问题

PR: https://github.com/cocos-creator/engine/commit/581ef383593051ce1ed3c8c29a9ab5f10f4bead1

2、修复spine使用多皮肤,在cache mode下不显示的问题

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

3、2.0.10 Label 较 2.0.9 卡顿

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

4、修复 cc.tween 的值为 0 时可能无效果的问题

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

5、 2.1.1用射线检测基础3D物体(长方体),检测距离会被缩放值影响

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

6、 bmfont内存泄漏

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

7、 Cocos Creator 2.0.9 ttf字体导致iOS设备上内存泄漏问题

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

8、 creator 2.09 微信小游戏上背景音乐无法关闭

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

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音效静音问题

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

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这个接口是可以修改材质上几乎所有属性的。

测试demo:
https://github.com/Jno1995/DynamicLoadingMaterial

2、cocos H5 在 ios端getID 无法判断

A: 因为这两个平台的touchID本身就是不一样的,这个需要注意一下。
所以touchID并不能作为多点触控的序号标识,
你应该获取

event.getTouches().length;
这个字段来检测触点数量

3、cocos creator 旋转 3d节点时 万向节死锁问题

A: https://forum.cocos.com/t/creator3d/79443/4?u=337031709

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

电脑蓝屏了 重启后就变这样了 一直卡在这里

删除系统盘中的用户目录下的.CocosCreator 文件夹,
之后重启creator试试。

mark

最近creator 吃内存有点大呀,项目比较大的情况下,creator基本卡的不行。每次重启creator后稍微好点。 2.0.9每修改一个界面,都要卡1-4秒。 2.0.10优化后也要卡个1-2秒 有什么好的解决方法吗?thanks

mark

mark

mark龙骨资源

还有黑边问题 这个问题大家都没有遇到吗?2.1.2

没救的,黑边问题修了一年都没修好

1赞

询问下,例子中的

如何在编辑器环境下,动态切换资源

我想知道怎么用TypeScript实现一样的功能。
JavaScript可以在properties里加入notify方法,但是TypeScript我找不到类似的实现方法。

参考这个 TS属性声明无法序列化

1赞

请问一下你们官方人员,我这边有个龙骨动画在安卓说有点问题,

怎么一直报错这个错啊

原生非网页端,videoplayer置顶问题如何解决,有合适的解决方法吗?

可以参考下这个 Cocos Creator 如何在 VideoPlayer 上面放置 UI 控件

谢谢 在原生那边添加了一个view来实现的