【问题标题】:Little simulation of gravity in JS using canvasJS中使用canvas模拟重力的小小技巧
【发布时间】:2012-08-10 20:26:25
【问题描述】:

所以,我正在尝试创建几个圆圈,然后我希望它们掉下来。下面是代码和演示:demoFireBug 告诉我没有为未定义的对象定义方法“move”,所以当我想创建一个对象数组时,一定有问题。纠正我的错误并考虑到我刚刚开始学习 JS 中的面向对象编程。

【问题讨论】:

标签: javascript simulation


【解决方案1】:

与其创建多个事件,不如创建一个事件并在其中循环:

  setInterval(function(){
    ctx.clearRect(0,0,1000,1000);  //Clear the canvas here
    for (i = 0;i<bubble.length;++i)
    {
      bubble[i].move();
      bubble[i].redraw();
    }
  },32);

问题是范围问题。 您编写它的方式i 在它们执行的所有事件中的值都是 10。

工作小提琴:http://jsfiddle.net/some/fGChQ/16/

您的另一个问题是您在重绘时清除了画布......对于每个圆圈。

【讨论】:

  • 这几乎可以工作,但会破坏除一个圆圈之外的所有圆圈。一个圆圈正确落下。
  • @GiovanniB 所有的圈子都在下降......但在重绘中画布被清除了。所以它清理了画布,画了圆圈 1,清理了画布,画了圆圈 2.... 清理了画布,画了圆圈 10。然后等了 32 毫秒,直到一切重新开始。
  • @mic4ael 没问题。如果您对此答案投了赞成票并接受了,那就太好了。
【解决方案2】:

我已经创建了一个 fork 来解决循环问题,清除画布矩形似乎也存在问题,导致了一些干扰

【讨论】:

    【解决方案3】:
    for (i = 0;i<bubble.length - 1; ++i)
    {
        console.log(bubble[i].y)
        setInterval(function(){
            bubble[i].move();
            bubble[i].redraw();
        },32);
    }
    

    bubble.length 为 10,数组索引为 0-9。 bubble[10] 是未定义的,所以你不能调用方法 move 。

    【讨论】:

    • 这会产生同样的问题
    • 小于号已经说明了这一点。 i++ 会更可取,但从外观上看,范围的真正问题。
    • 它仍然没有解决我的问题,因为我希望每个圆圈同时倒下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多