Javascript Canvas +对象/功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript Canvas +对象/功能相关的知识,希望对你有一定的参考价值。

我正在尝试自学javascript,所以我决定用html5和canvas做一个项目,但是我的代码中遇到了一个我无法弄清楚的错误。我将我的上下文声明为变量c,但在引用c的任何函数和对象定义中,诸如c.beginPath()之类的东西都显示为未定义。但是,如果这样的引用可以在函数之外工作。我非常密切地关注画布上的在线教程,我看不出我正在做什么和教程正在做什么会使我的代码无法运行。我的大部分代码都在下面,调用draw方法会给我带来麻烦。任何帮助,将不胜感激!

var canvas = document.querySelector('canvas');

var w = window.innerWidth;
var h = window.innerHeight
canvas.width = w;
canvas.height = h;

var c = canvas.getContext('2d');

// circle object
function Circle(x, y, dx, dy, r, color) {
  this.x = x;
  this.y = y;
  this.dx = dx;
  this.dy = dy;
  this.r = r;
  this.color = color;

  this.draw = function() {
    c.beginPath();
    c.arc(this.x, this.y, this.r, 0, 2 * Math.PI, false);
    c.strokeStyle = this.color;
    c.stroke();
    c.fill();
  }

  this.update = function() {
    if (this.x + this.r > w || this.x - this.r < 0) {
      this.dx = -this.dx;
    }
    if (this.y + this.r > h || this.y - this.r < 0) {
      this.dy = -this.dy;
    }

    this.x += this.dx;
    this.y += this.dy;

    this.draw();
  }
}
<canvas></canvas>
答案

有些事你不做我相信可能让你感到困惑。

你有一个类似Circle的结构。我猜这是给你的代码的意图,但你没有在任何地方创建该类的实例。

您需要创建该类的新引用,然后在新对象中调用您想要该类的方法。

我用你自己的代码为你写了一个小提琴。

像这样的东西:

var j = new Circle(100, 100, 200, 200, 20, 'red');
j.draw();

https://jsfiddle.net/wu3dcyfm/

以上是关于Javascript Canvas +对象/功能的主要内容,如果未能解决你的问题,请参考以下文章

温故而知新-Javascript使用canvas元素(第一部分)

[JavaScript] Canvas中ImageData

javascript:使用canvas绘图2D图形

用html5的canvas和JavaScript创建一个绘图程序

javascript canvas全部API

Canvas + JavaScript 制作图片粒子效果