Cocos Creator v2.4.0-rc.9 测试帖(正式版已发)

android发布还是不支援bundle压缩成zip吗??

我现在分不清,cc.assetManager与cc.resource里面重合API的区别了, resource是一个bundle,是将Resource文件夹做为一个bundle,而且是默认的。那么cc.assetManager里面的release和 cc.resource.release是否是等价的呢?

cc.assetManager 里面没有 release 啊,只有 releaseAsset,两个参数不一样的

抱歉,现在只支持使用 ttf 字体加上char模式,才能在原生上用 outline 和 shadow

V2.4.0-pre 版本安装一直解压失败

现在是需要开发者在动态加载资源的时候主动调用addRef么
那比如场景的某个SpriteFrame节点显示1号英雄,游戏里需要动态的更换为2号英雄,那我就会动态加载2号英雄的资源,过一会儿又需要显示1号英雄,那动态加载的时候还需要调用addRef么
每次设置英雄资源的时候,都是走动态加载的流程,那每次都需要调用addRef么

如果英雄有100个,更换资源的时候都是动态加载,在游戏各个场景都有使用到,之前完全可以不释放内存,因为JavaScript 的垃圾回收是延迟的,搞不好会出现俩份同样的拷贝,所以干脆不做内存回收
那么现在的我依然不关心内存释放,不调用addRef,会出问题吗
如果新版本需要更改之前的加载相关代码,且不是简单的改改函数名,调用方式的话,这怎么敢升级

你们这个bundle的概念又和unity的很多不一样,现在一下子搞不清,详细请教下:

  1. 内置的4种bundle,都是啥作用哦,文档提到这块的比较少。这几个bundle要手工loadBunle吗
  2. 文档的升级指南里,说将cc.loader换成cc.resource就可以,实际上我这边换了以后效果不一样,比如cc.loader.loadResDir和cc.resource.loadDir的效果就不一样。
    3.cc.assetManger与cc.resource的分工是啥, cc.assetManager似乎是包含了cc.resources

问题场景:
线上游戏版本1,有一张图片,开启md5 cache打包后名字是md5_1.png
开发版本2,这张图片被修改了,打包后名字是md5_2.png
这个时候版本2提交上线,资源上传cdn,玩家陆续更新,不会影响线上版本1的玩家,因为线上版本找的是md5_1.png

换成现在Bundle的方式,加载Bundle用的是Bundle的名字,那么上面的例子中,Bundle上传cdn会覆盖旧的Bundle,版本2陆续有玩家更新,会有新注册玩家因为cdn延迟的原因,下载的是版本1的包,加载Bundle的时候,有俩种结果,一种是尝试加载旧Bundle,肯定会失败,另一种是加载到了新的Bundle,资源会错乱

1赞

我们看一下,应该是windows下路径太长的问题

只要你持有对象,就需要,当你不需要持有对象的时候,就 decRef。

不做内存回收的话,可以不用 addRef 的,你以前的写法可以了,你这个应用场景下不要在场景上勾选自动释放

CCEffect %{
      techniques:
      - name: fog
        passes:
        - vert: fog-vs:vert
          frag: fog-fs:frag
          depthStencilState:
            depthTest: true
            depthWrite: true
          properties: &props
            mainTexture:  { value: grey         }
            color:        { value: [1, 1, 1, 1], editor: { type: color } }
            amt:          { value: 0.0            }
    }%

    CCProgram fog-vs %{
      precision highp float;
      #include <cc-local>
      #include <cc-global>
      #include <input-standard>

      in vec2 a_texCoord;
      out vec2 v_uv;

      highp vec4 vert () {
        StandardVertInput In;
        CCVertInput(In);

        highp mat4 matWorld;
        matWorld = cc_matWorld;
        // CCGetWorldMatrix(matWorld);

        highp vec4 vpos = cc_matView * matWorld * In.position;
        highp vec4 pos = cc_matProj * vpos;

        v_uv = a_texCoord;
        return pos;
      }
    }%

    CCProgram fog-fs %{
      precision highp float;
      #include <output>

      in vec2 v_uv;
      uniform sampler2D mainTexture;
      uniform allColor {
        vec4 color;
        float amt;
      };

      vec4 frag () {
        vec4 o = vec4(1, 1, 1, 1);

        o *= texture(mainTexture, v_uv);
        // o.rgb = mix(color.rgb,o.rgb,amt);
        return CCFragOutput(o);
      }
    }% 

材质问题,该effect在C3D 1.1.0表现正常,在CC2.4.0-rc2表现不正常
如下图

  1. 内置的4种bundle,都是啥作用哦,文档提到这块的比较少。这几个bundle要手工loadBunle吗

如果你没有特殊需求的话,是不用手动load的,这几个内置bundle是在启动游戏的时候加载的,相关代码请查阅构建之后的main.js文件,里面有加载内置bundle的代码。当然,如果你有特殊需求,比如说:你觉得一开始用不着resources bundle,不用加载,你也可以将 main.js 中的加载resources 的部分移除,在你想要加载的地方加载。也是可以的

  1. 文档的升级指南里,说将cc.loader换成cc.resource就可以,实际上我这边换了以后效果不一样,比如cc.loader.loadResDir和cc.resource.loadDir的效果就不一样。

参数可能有特别细小的差别,不过一般正常使用的话,是可以直接替换的,你那边遇到什么效果上的不同了呢?

3.cc.assetManger与cc.resource的分工是啥, cc.assetManager似乎是包含了cc.resources

cc.resouces 是属于 cc.assetManager 的一部分,cc.resources 是完全等价于 cc.assetManager.getBundle(‘resources’) 的. cc.resources 是一个 bundle。cc.assetManager 是所有 bundle 的集合,以及一些公共的方法

Bundle上传cdn会覆盖旧的Bundle

也可以不覆盖的呀,可以在服务器上合并文件夹啊。

方式一都可以不覆盖,方式二没理由要覆盖啊

没有 a_texCoord,应该用 a_uv0 吧

多谢,解决了

多谢解答,已经有一定的概念了。 cc.assetManager里面有些API没有在d.ts里,像loadRes等,这个能完善下吗

cc.assetManager 是没有 loadRes 的。只有 cc.loader 才有 loadRes,loadRes 应该 用 cc.resources.load 来代替,

什么时候支持多开编辑器?
我这边经常需要多开