如何解决无法创建十六进制值的渐变 - 由于形状的性质,传统的渐变笔触/填充不起作用
所以我试图为弹簧设置动画。除了它的颜色,它都完成了。下面我附上了一张它应该是什么样子的图片,但是无论我自己尝试什么,都会得到一个纯色的春天。
Example of what I need to achieve
我将在下面包含我的代码。所以下面是我如何绘制它,但请注意 'fade hex' 函数,设置 'NowColour' 变量。这就是行为不正确的原因。
var holder = new createjs.MovieClip();
var dobj = new createjs.Shape();
holder.addChild(dobj);
dobj.graphics.clear();
for(let nLoop = 0; nLoop < 205; nLoop++){
var startHex = 0x666666;// dark grey
var endHex = 0x999999;// light grey
var NowColor = calcs.fade_hex_spring(startHex,endHex,(1 + Math.cos(nLoop / 5))/2);
dobj.graphics.setstrokeStyle(springThickness,'round','round').beginstroke(NowColor);
nPoint = 10 + (20 - 10) * (nLoop / 5 + 2 * Math.cos(nLoop / 5)) / (204 / 5);
dobj.graphics.lineto((0 - 495) + 30 * Math.sin(nLoop / 5),nPoint);
}
function fade_hex_spring(hex,hex2,ratio) {
// //Attempt 1
// var r = hex >> 16;
// var g = hex >> 8 & 0xFF;
// var b = hex & 0xFF;
// r += ((hex2 >> 16) - r) * ratio;
// g += ((hex2 >> 8 & 0xFF) - g) * ratio;
// b += ((hex2 & 0xFF) - b) * ratio;
// var result = (r << 16 | g << 8| b);
// result = result.toString(16);
// return '#' + result;
//Attempt 2
var r = parseInt(String(hex).slice(1,3),16),g = parseInt(String(hex).slice(3,5),b = parseInt(String(hex).slice(5,7),16);
var r2 = parseInt(String(hex2).slice(1,g2 = parseInt(String(hex2).slice(3,b2 = parseInt(String(hex2).slice(5,16);
console.log(ratio)
var r3 = roundTo((r2 - r) * ratio,0);
g3 = roundTo((g2 - g) * ratio,0),b3 = roundTo((b2 - b) * ratio,0);
// console.log(r3)
return 'rgba(' + abs(r3) + 150 + ',' + abs(g3) + 150 + ',' + abs(b3) + 150 + ',1)';
},
如您所见,我尝试通过十六进制和 rgb 值来实现。我记录了比率,它们似乎正确返回,但我的弹簧仍然是纯色。任何帮助将不胜感激!
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。