for循环未与对象一起执行

海德鹿

我正在使用Canvas玩和学习Javascript。目前,我正在创建一个圆,并将其显示在屏幕上的随机区域中。我能够完全完成该练习。一切都在一个功能中顺利运行。

现在,我想为该圆创建一个对象,并在for循环中调用它。我创建了对象,但是还是有问题。我只看到一个圆圈,而不是40个圆圈。在这儿寻求帮助之前,我用力撞了一段时间。看一下下面的代码。

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

if (!ctx) {
  alert('HTML5 Canvas is not supported in you browser');
}

function Circle(posX, posY, radius, startAngle, endAngle, anticlockwise) {
    this.posX = posX;
    this.posY = posY;
    this.radius = radius;
    this.startAngle = startAngle;
    this.endAngle = endAngle;
    this.anticlockwise = anticlockwise;

    this.test = function() {
        ctx.beginPath();
        ctx.arc(posX, posY, radius, startAngle, endAngle, anticlockwise);
        ctx.fill();
  }
}

var cir = new Circle(
    (Math.random() * canvas.width),
    (Math.random() * canvas.height),
    20,
    0,
    Math.PI*2,
    true
);

function drawCircle() {
        for(var i = 0; i < 40; i++){
        cir.test(); 

        }
}

/*setInterval(drawCircle, 400)*/
 drawCircle();
巴瑟姆

您正在呼叫cir.test()40次而没有40个Circle实例。这是同一圆圈在其顶部绘制40次。

这可能是您的问题的立即解决方案:

function drawCircle() {
        for(var i = 0; i < 40; i++){
            // Mind you that doing this
            // Will not allow you to reference
            // your circles after they are
            // created. The best method is 
            // to put them in an array
            // of circles
            var cir = new Circle(
                (Math.random() * canvas.width),
                (Math.random() * canvas.height),
                20,
                0,
                Math.PI*2,
                true
            );

            cir.test();
        }
}

/*setInterval(drawCircle, 400)*/
 drawCircle();

但是,我建议对您的代码进行以下更改:

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

if (!ctx) {
  alert('HTML5 Canvas is not supported in you browser');
}

function Circle(posX, posY, radius, startAngle, endAngle, anticlockwise) {
    this.posX = posX;
    this.posY = posY;
    this.radius = radius;
    this.startAngle = startAngle;
    this.endAngle = endAngle;
    this.anticlockwise = anticlockwise;

    // Using better function names
    // is always a good idea
    this.testDraw = function() {
        ctx.beginPath();
        ctx.arc(posX, posY, radius, startAngle, endAngle, anticlockwise);
        ctx.fill();
  }
}

// Create an array to fill
// with Circle instances
var circlesArray = []

// Changed drawCircle to drawCircles
// it is clearer
function drawCircles() {
    for(var i = 0; i < 40; i++){
        // Create new Circle objects
        // and add them to the circlesArray
        // this will allow you to have a
        // each circle later on
        circlesArray.push(new Circle(
            (Math.random() * canvas.width),
            (Math.random() * canvas.height),
            20,
            0,
            Math.PI*2,
            true
        ));

        // Go through each item of the array
        // and call the test function
        circlesArray[i].testDraw();
    }
}

/*setInterval(drawCircle, 400)*/
 drawCircles();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

RLMArray 对象未与其对象一起存储

来自分类Dev

循环执行功能并将Pandas数据框绑定在一起

来自分类Dev

在线程执行循环迭代时如何继续与master一起工作?

来自分类Dev

foreach循环无法正常工作-未与if语句一起加入

来自分类Dev

不能一起执行的功能

来自分类Dev

moveToThread()和start()可以与未构造的对象一起使用吗?

来自分类Dev

通过元素组合在一起的jQuery对象循环

来自分类Dev

将AngularJS中的jQueryUI插件与ngRepeat循环中的数据绑定对象数组一起使用

来自分类Dev

Java 8:groupingBy与关联对象的属性一起使用吗?[循环推断]

来自分类Dev

循环json对象并通过用户输入将元素与值一起添加

来自分类Dev

如何从数组中删除对象并将该数组与初始 for 循环一起使用?

来自分类Dev

结果未与$ Scope一起显示

来自分类Dev

将multipart与for循环一起使用

来自分类Dev

与提迪尔一起循环

来自分类Dev

一起使用循环和方法

来自分类Dev

与 time.sleep 一起循环

来自分类Dev

与对象自杀一起使用交换

来自分类Dev

与对象类型一起使用

来自分类Dev

@Formula无法与对象一起休眠

来自分类Dev

RXJS与对象一起使用ForkJoin

来自分类Dev

将makeObjectsPerformSelector与对象一起使用

来自分类Dev

Python错误:将statsmodels与一行数据一起使用时,未调整大小的对象的len()

来自分类Dev

For循环与后台循环一起完成吗?

来自分类Dev

For循环与后台循环一起完成吗?

来自分类Dev

一起执行两个无限循环。1个多线程服务器的while循环和GUI的其他无限循环

来自分类Dev

将自定义架构名称与Azure移动服务请求对象执行方法一起使用

来自分类Dev

如何将RxJS可观察对象与for循环正确地链接在一起?

来自分类Dev

Docker卷未与Redis一起使用(挂载确实与inspect一起显示)

来自分类Dev

将对象与子(关联)对象一起存储,存储

Related 相关文章

  1. 1

    RLMArray 对象未与其对象一起存储

  2. 2

    循环执行功能并将Pandas数据框绑定在一起

  3. 3

    在线程执行循环迭代时如何继续与master一起工作?

  4. 4

    foreach循环无法正常工作-未与if语句一起加入

  5. 5

    不能一起执行的功能

  6. 6

    moveToThread()和start()可以与未构造的对象一起使用吗?

  7. 7

    通过元素组合在一起的jQuery对象循环

  8. 8

    将AngularJS中的jQueryUI插件与ngRepeat循环中的数据绑定对象数组一起使用

  9. 9

    Java 8:groupingBy与关联对象的属性一起使用吗?[循环推断]

  10. 10

    循环json对象并通过用户输入将元素与值一起添加

  11. 11

    如何从数组中删除对象并将该数组与初始 for 循环一起使用?

  12. 12

    结果未与$ Scope一起显示

  13. 13

    将multipart与for循环一起使用

  14. 14

    与提迪尔一起循环

  15. 15

    一起使用循环和方法

  16. 16

    与 time.sleep 一起循环

  17. 17

    与对象自杀一起使用交换

  18. 18

    与对象类型一起使用

  19. 19

    @Formula无法与对象一起休眠

  20. 20

    RXJS与对象一起使用ForkJoin

  21. 21

    将makeObjectsPerformSelector与对象一起使用

  22. 22

    Python错误:将statsmodels与一行数据一起使用时,未调整大小的对象的len()

  23. 23

    For循环与后台循环一起完成吗?

  24. 24

    For循环与后台循环一起完成吗?

  25. 25

    一起执行两个无限循环。1个多线程服务器的while循环和GUI的其他无限循环

  26. 26

    将自定义架构名称与Azure移动服务请求对象执行方法一起使用

  27. 27

    如何将RxJS可观察对象与for循环正确地链接在一起?

  28. 28

    Docker卷未与Redis一起使用(挂载确实与inspect一起显示)

  29. 29

    将对象与子(关联)对象一起存储,存储

热门标签

归档