gpt4 book ai didi

javascript - 在 JavaScript 中在 Canvas 上绘图时改变线条颜色、alpha 和宽度

转载 作者:行者123 更新时间:2023-12-02 23:33:55 26 4
gpt4 key购买 nike

我正在 Chrome 中对此进行测试。我尝试了 StackOverflow here 的线条粗细解决方案但这不起作用。

我有一个名为 redLine 的对象,其中包含一个位置和一个偏移位置数组。唯一受影响的是 alpha 值。颜色和线条粗细一旦设置就保持不变。

function renderRedLine(){

context.beginPath();

for(j=0; j<redLine.posArr.length; ++j){

var startPoint

if(j===0){
startPoint = redLine.pos
}else{
startPoint = redLine.posArr[j-1]
}

var endPoint = redLine.posArr[j]

let alpha = 1.0 - (j/(redLine.posArr.length-1))

let g = 150 - (10*j)

context.strokeStyle = 'rgba(255, ' + g + ', ' + 0 + ', ' + alpha + ')'
context.lineWidth = j+1

if(j===0){
context.moveTo(startPoint.x, startPoint.y);
}else{
context.lineTo(endPoint.x, endPoint.y);
}

context.stroke();

}

context.closePath();

}

最佳答案

您需要在每个ctx.lines()之后调用ctx.beginPath(),否则,所有下一个lineTo()都将是添加到唯一的子路径中,当您使用较粗的 lineWidth 再次调用 lines() 时,整个子路径将被重新绘制,覆盖之前绘制的较细的线条。

const context = canvas.getContext('2d');
const redLine = {
posArr: Array.from({
length: 12
}).map(() => ({
x: Math.random() * canvas.width,
y: Math.random() * canvas.height
})),
pos: {
x: canvas.width / 2,
y: canvas.height / 2
}
};
console.log(redLine);
renderRedLine();

function renderRedLine() {

for (j = 0; j < redLine.posArr.length; ++j) {
// at every iteration we start a new sub-path
context.beginPath();

let startPoint;
if (j === 0) {
startPoint = redLine.pos
} else {
startPoint = redLine.posArr[j - 1]
}

const endPoint = redLine.posArr[j]
const alpha = 1.0 - (j / (redLine.posArr.length - 1))
const g = 150 - (10 * j)

context.strokeStyle = 'rgba(255, ' + g + ', ' + 0 + ', ' + alpha + ')'
context.lineWidth = j + 1
// since we start a new sub-path at every iteration
// we need to moveTo(start) unconditionnaly
context.moveTo(startPoint.x, startPoint.y);
context.lineTo(endPoint.x, endPoint.y);

context.stroke();
}

//context.closePath is only just a lineTo(path.lastMovedX, path.lastMovedY)
// i.e not something you want here

}
<canvas id="canvas"></canvas>

关于javascript - 在 JavaScript 中在 Canvas 上绘图时改变线条颜色、alpha 和宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56368208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com