javascript - 不了解此 Canvas 代码的工作原理

标签 javascript canvas

我正在玩 Canvas 代码。我写了一个画出路径的函数

  function draw_faces() {
    var canvas = document.getElementById("faces_bkgd");
    if (canvas.getContext) {
      var ctx = canvas.getContext("2d");

      var happy_face = new Path2D();
      happy_face.rect(10,10,100,100);
      ctx.fillStyle = "rgb(0,0,200)";
      ctx.fill(happy_face);

      happy_face.moveTo(50,50);
      happy_face.lineTo(90,90);
      happy_face.lineTo(90,50);

      ctx.fillStyle = "rgb(200,0,0)";
      ctx.fill(happy_face);

      ctx.save();
      ctx.translate(50,50);
      ctx.fillStyle="rgb(0,200,0)";
      ctx.fill(happy_face);
      ctx.restore();
    }

enter image description here

fiddle demo

它在页面左上角给出了以下输出,其中有一个带有蓝色三 Angular 形的红色正方形。在红色方 block 的底部,有一个重叠的绿色方 block ,上面有一个三 Angular 形切口。

为什么它是一个带有三 Angular 形切口的绿色正方形而不是带有蓝色三 Angular 形的绿色正方形?

另外,你们用什么在 Web Inspector for Safari 上调试 Canvas?

最佳答案

编辑:我创建了一些图像来逐步解释正在发生的事情。如果您希望我更详细地介绍,请告诉我。如果有某些部分你不明白,请告诉我。如果有没有意义的术语(方法等)让我知道。有什么不明白的就告诉我。 :)

enter image description here enter image description here


以下是您编写代码的重要部分,其中包含对实际情况的评论。

代码的第一部分绘制了一个蓝色方 block ,其中包含一个您已定义为矩形的 Path2D 实例。

     var happy_face = new Path2D();
     happy_face.rect(10, 10, 100, 100);
     ctx.fillStyle = "rgb(0,0,200)";
     ctx.fill(happy_face);

然后不是创建 Path2D 的新实例,而是使用之前的变量 happy_face,它仍然定义为 rect,现在您切出一个三 Angular 形并将颜色设置为红色并绘制它。

     //The moveTo and lineTo cut out a triangle in your square.
     happy_face.moveTo(50, 50);
     happy_face.lineTo(90, 90);
     happy_face.lineTo(90, 50);

     ctx.fillStyle = "rgb(200,0,0)";
     ctx.fill(happy_face);

由于您没有移动这个切出三 Angular 形的正方形,所以您在蓝色正方形的顶部绘制。这给人的印象是您切出的三 Angular 形是蓝色的,但那只是下面的旧正方形。

将忽略保存和恢复方法,因为它们没有做任何有值(value)的事情。然后你做一个 tanslate.. 它只是将指针从你开始绘制的地方从 (0,0) 移动到 (50, 50)。在这一点上,您将颜色从红色更改为绿色,并开始在 (50, 50) happy_face(切出一个三 Angular 形的旧正方形)处绘制。

  ctx.save();
  ctx.translate(50,50);
  ctx.fillStyle="rgb(0,200,0)";
  ctx.fill(happy_face);
  ctx.restore();

不幸的是你不能首次亮相“ Canvas ”。因为当你画东西的时候,你不能只是移动它。它实际上是画在 Canvas 上的。如果您在另一个正方形之上绘制一个正方形,那么之前的正方形就会丢失。

关于javascript - 不了解此 Canvas 代码的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32248581/

相关文章:

javascript - 在 CoffeeScript 中将函数作为参数传递

javascript - 如何从父页面获取属性值。我尝试使用opener和window.parent。但是不起作用

javascript - 缩放 Canvas 上的鼠标位置

javascript - 复选框返回两个值

javascript - 在 puppeteer 中滚动到 div 的底部不起作用

c# - 如何在像素艺术编辑器中优化绘制区域

javascript - Canvas Html5 Drawing App,移动 Canvas 导致大问题

javascript - 如何删除 JavaScript Canvas 渲染上下文的状态堆栈?

清除 Canvas 后,JavaScript Canvas 元素不显示

javascript - 使用加号和减号按钮输入