javascript - 使用 rect() 方法填充两种颜色

标签 javascript canvas

我试图制作两种不同颜色的不同形状,但它不起作用。两个形状的颜色相同。请帮忙!(请注意,我不是世界上最好的编码员)

我在这个网站上查找了其他示例,但它们都使用了 lineTo() 方法,我想使用 rect() 方法只是为了让事情变得更容易。

//make canvas and set it up
var canvas = document.createElement('canvas');
document.body.appendChild(canvas);
var ctx = canvas.getContext('2d');

canvas.height = window.innerHeight;
canvas.width = window.innerWidth;
canvas.style.position = 'absolute';
canvas.style.left = '0px';
canvas.style.top = '0px';
canvas.style.backgroundColor = '#D0C6C6';
var cH = canvas.height;
var cW = canvas.width;

//draw paddles

//variables
var paddleLength = 120;
var redPaddleY = window.innerHeight / 2;
var bluePaddleY = window.innerHeight / 2;
var paddleWidth = 20;
//drawing starts
function drawPaddles() {
    //RED PADDLE
    var redPaddle = function(color) {
    ctx.fillStyle = color;
    ctx.clearRect(0, 0, cW, cH);
    ctx.rect(cH / 12, redPaddleY - paddleLength / 2, paddleWidth, paddleLength);
    ctx.fill();
    };
    //BLUE PADDLE
    var bluePaddle = function(color) {
    ctx.fillStyle = color;
    ctx.clearRect(0, 0, cW, cH);
    ctx.rect(cH / 12 * 14, bluePaddleY - paddleLength / 2, paddleWidth, paddleLength);
    ctx.fill();
    };
    redPaddle('red');
    bluePaddle('blue');
};
var interval = setInterval(drawPaddles, 25);

最佳答案

每当您将形状添加到 Canvas 时,它就会成为当前路径的一部分。当前路径保持打开状态,直到您使用 beginPath() 告诉 Canvas 开始新路径。这意味着当您添加第二个 rect() 时,它会与第一个 rect() 组合并填充相同的颜色。

最简单的解决方法是使用 fillRect() 函数而不是 rect,它可以在一次调用中开始、关闭并填充路径。

var redPaddle = function(color) {
  ctx.fillStyle = color;
  ctx.fillRect(cH / 12, redPaddleY - paddleLength / 2, paddleWidth, paddleLength);
};

如果您仍然想使用 rect(),您应该告诉 Canvas 为每个桨开始一条新路径。

var redPaddle = function(color) {
  ctx.fillStyle = color;
  ctx.beginPath();
  ctx.rect(cH / 12, redPaddleY - paddleLength / 2, paddleWidth, paddleLength);
  ctx.fill();
};

我还建议将clearRect()移到绘图函数之外。每帧清除一次并绘制两个桨。

...    
ctx.clearRect(0, 0, cW, cH);
redPaddle();
bluePaddle();
...

您还应该调查requestAnimationFrame()进行动画循环,因为它可以在时间间隔内提供许多性能改进。

关于javascript - 使用 rect() 方法填充两种颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57503041/

相关文章:

javascript - html2canvas/jsPDF - 将 html 转换为 pdf 时不显示图像

javascript - 无法让 javascript 在值更改时触发

javascript - 如何定期发出xmlhttprequest?

javascript - 当我到达最后一页时,我向服务器发出 AJAX 调用,以获取数据库中的更多数据,而无需等待单击下一个按钮

javascript - 如何在 MyAdapter 的 ListView 中添加广告

javascript - AngularJS 列 col-md 大小

javascript - 托管站点缺少本地 html 文件中的元素

javascript - 本地跨源数据错误

javascript - 如何将 HTML5 Canvas 存储为帧列表中的图像?

image - 在 html5 中绘制图像/纹理