2.1.2怎么用代码动态使用材质系统?

        cc.loader.load({url:headimgurl, type:'png'}, function(err, texture){
            let sf = new cc.SpriteFrame(texture);
            let sp = new cc.Sprite();
            
            let material = cc.Material.getInstantiatedBuiltinMaterial('CirclePortrait', sp);
            sp.spriteFrame = sf;
            sp.setMaterial(0, material);
            sp.spriteFrame = sf;
            element.node.addChild(sp.node);

        })

如伪代码所示,怎么在cc.loader里用代码使用2.1.2的材质系统?(远程加载一个头像然后使用原型头像的材质),应该是很常见的需求吧。但是看了源码也没看懂怎么该怎么弄。

@BigBear

LZ我也有动态材质的需求,而且是完全动态的使用方式,现在我被卡在Technique类的构造函数上了,不知道在哪里,感觉好像根本没有被import到引擎模块里、。。

为啥要代码动态创建材质文件?
写好材质文件直接调用不好吗?

LZ你这个,应该貌似能直接从原型头像里的渲染组件里取到材质吧,比如用相应组件的getMaterial函数或者sharedMaterial属性- -

目前就是这个需求,虽然是我自己的,但我这个人太任性了,不想改,没办法_(:з」∠)_
我现在已经有点想定制引擎了。。。

我觉得你这个有点强迫症了。除非你所有的effect都是随机的。否则没必要自动生成。

其实就是要动态生成一个spriteFrame或者sprite,然后代码加载effect,最后抛给fairygui使用。那个fairygui在creator居然不支持圆角矩形的遮罩,只能自己想办法绕开实现

1赞

cc.Material.setProperty设置材质的属性
另外更换spriteFrame就直接给sprite的spriteframe属性赋值就行,不需要重新给材质,只要你之前给这个sprite的材质是一个圆角矩形效果的材质就行

其实我是在fairygui中使用,很可惜的是只能传spriteframe过去,不能传sprite过去。而且我试过使用圆角矩形的Material 的Sprite 获取 spriteframe 传过去了。可惜还是没有圆角矩形的效果。
希望cocos能把 cc.mask 添加一个圆角矩形的遮罩,他们说挺简单,只是creator没有封装。
圆角矩形的遮罩很多地方也会常用 比如头像 ,项目图标之类的