解决了吗?
2022了,还是没有解决
17年的帖子,6年了,我的天
用mask组件然后里面有一个_graphics 属性, 首先要用mask组件来画你的线条,最后更改mask的透明度就可以了
version:3.7
可以使用tween在onUpdate中进行渐变,可以实现,但性能未知,仅供参考。
tween(this.node.getComponent(Graphics)).to(1.0, null, {
easing: ‘smooth’,
onUpdate: (target: Graphics, ratio) => {
let g = target;
g.clear();
g.fillColor = new Color(0, 0, 0, 200 * (1 - ratio));
g.roundRect(0, 0, 100, 100, 5);
g.close();
g.stroke();
g.fill();
}
}).start();
提了个PR改了引擎,graphics已经可以支持透明度,有需要的可以复制自己魔改引擎,或者等等看官方会不会合并。
如果不会改引擎,做一个自定义graphics也是可以的
@ccclass('CustomGraphics')
export class CustomGraphics extends Graphics {
_render(render) {
super._render(render);
if (this.node._uiProps.colorDirty && this.node._uiProps.opacity !== 1) {
this.updateOpacity();
}
}
updateOpacity() {
const impl = this.impl;
if (!impl) {
return;
}
const renderDataList = impl && impl.getRenderDataList();
if (renderDataList.length <= 0 || !this.model) {
return;
}
const subModelList = this.model.subModels;
for (let i = 0; i < renderDataList.length; i++) {
const renderData = renderDataList[i];
const vb = new Float32Array(renderData.vertexStart * 8);
for (let j = 0; j < renderData.vertexStart * 8; j++) {
if (j % 8 === 6) {
vb[j] = renderData.vData[j] * this.node._uiProps.opacity;
} else {
vb[j] = renderData.vData[j];
}
}
subModelList[i].inputAssembler.vertexBuffers[0].update(vb);
}
}
}
1赞
3.8了,还是不支持
现在可以支持graphics透明度了吗
好像还是不支持。我都用图片了
支持了,设置strokeColor的a值为100可以与相交颜色混合