这个需要修改引擎,在引擎里加个透明度的参数,然后再加个jsb绑定~
之前改过,不过找不到了
试试自己修改一下~
以下修为1.x版本(2.x应该也差不多)
cocos/editor-support/creator/CCGraphicsNode.h
void setGraphicsOpacity(const float opacity) { _graphicsOpacity = opacity; } //增加一个这个,前提 是你定义一下变量 _graphicsOpacity
//float _graphicsOpacity;
//_graphicsOpacity初始化为255
//当然你也可以定义一下get 函数
在 cpp里
void GraphicsNode::onDraw(const Mat4 &transform, uint32_t flags)
if (cmd->nIndices) {
Color4F& color = cmd->color;
//program->setUniformLocationWith4f(colorLocation, color.r, color.g, color.b, color.a);//修改为下面的
program->setUniformLocationWith4f(colorLocation, color.r, color.g, color.b, color.a * _graphicsOpacity/255);
program->setUniformLocationWith1f(strokeMultLocation, cmd->strokeMult);
然后 绑定一下 setGraphicsOpacity 这个函数 就可以了
然后js里改变透明度时,调用一下这个函数就可以了~~
写的有点乱 。。。
2.1.2了,引擎组能关注一下这个问题吗。
貌似2.1.2依然没有解决这个问题,我也碰到同样问题。
目前暂不支持透明度修改,请知悉。
遇到什么困难了,2.4都还没支持?!
在改变node透明度的时候可以在update里刷新graphics的strokeColor或者fillColor中的a
你只改变颜色是不行的,改变后你还得重新fill或stoke,这两个方法里还会涉及一些计算,频繁的调用对性能有损耗
自己修改下effect,加一个透明属性,自己修改,比修改顶点属性还要好点
都2021年了,还是没有解决
graphics的透明度是由绘制颜色cc.color(255,255,255,0)的最后一个alpha值决定的
那问题来了,怎么渐变呢
渐变alpha值再进行清除重新绘制,实现层面肯定没问题,用tween就可以,性能不懂怎么样
解决了吗?
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();