【问题标题】:Drawing Object Arrays with JS Canvas使用 JS Canvas 绘制对象数组
【发布时间】:2015-10-06 06:09:04
【问题描述】:

我是 JS 新手,还没有接触过 jQuery 之类的东西。我要做的就是在画布上绘制 4 个简单的圆圈。我将对象放入一个数组中,因为我计划将来可能会扩展,但这些信息是无关紧要的。

我需要帮助的是了解如何在数组中创建对象然后在画布上显示它们的基础知识。这是我功能失调的代码:

var canvas = document.getElementById("canvas"),
ctx = canvas.getContext("2d");

var W = 400, H = 500
canvas.width = W, canvas.height = H;

var ball = [3];

for (i===0;i<=3; i++){
    ball[i] = {
        x: (Math.floor(Math.random() * 350) + 50),
        y: (Math.floor(Math.random() * 450) + 50),

        color: "red",
        radius: (Math.floor(Math.random() * 35) + 15),

    draw: balls(x, y, color, radius)
    };
}    

function balls(x, y, color, radius){   
    ctx.beginPath();
    ctx.arc(x, y, radius, 0, 2*Math.PI, false);
    ctx.fillStyle = color;
    ctx.fill();
    ctx.closePath();
}

【问题讨论】:

    标签: javascript arrays html object canvas


    【解决方案1】:

    您可以像这样简单地将draw 分配给balls 函数:

    ball[i] = {
        ....
        draw: balls
    };
    

    然后绘制它,一旦你定义了ball[i],就调用它的draw()函数:

    var b = ball[i];
    b.draw(b.x, b.y, b.color ,b.radius); 
    

    Example Here

    编辑:不使用像ball 这样的括号是如何引用函数ball() 本身。最后一件事,您需要将for (i===0;i&lt;=3; i++) 更改为for (i=0;i&lt;=3; i++)=== 是严格的比较运算符,= 是赋值。

    【讨论】:

      【解决方案2】:

      你用这个方法让它变得非常复杂:

      function ball(){
          this.x = Math.random() * 100;
          this.y = Math.random() * 100;
          this.radius = Math.random() * 10;
          this.color = "#" + (Math.random() * 16777215).toString(16);
      
          this.draw = function(){
              ctx.beginPath();
              ctx.arc(this.x, this.y, this.radius, 0, 2*Math.PI, false);
              ctx.fillStyle = color;
              ctx.fill();
              ctx.closePath();
          }
      }
      
      var balls = [];
      
      for(var i = 0; i < 4; i++) {
          balls[i] = new ball();
          balls[i].draw();
      }
      

      【讨论】:

      • 啊啊啊非常感谢!再说一次,我是新手,所以到目前为止,过度复杂化似乎是我的专长啊哈。如果您不介意我的询问(因此我更好地理解以供将来参考),当您确定颜色时,为什么要 (Math.random() * 16777215)?它到底有什么作用?
      • 这会创建一个介于 0 和 16777215 之间的随机数,即 256 * 256 * 256,即 rgb 和 .toString(16) 将其设为基数 16,我们在开头附加一个哈希标签。得到一个随机的十六进制颜色
      猜你喜欢
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 2012-10-23
      • 2013-11-18
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多