【问题标题】:p5.js - changing order of two code lines changes behaviour of drawing squaresp5.j​​s - 改变两行代码的顺序会改变绘制正方形的行为
【发布时间】:2019-01-12 04:34:24
【问题描述】:

p5.js 有一个奇怪的问题。基本上,有一个重力源(红色方块)和一个围绕红色方块运行的蓝色方块(代码中称为像素)。 proc() 函数在时间上迈出了一步并继续对两个对象进行物理处理,draw() 函数只是绘制了这两个正方形。问题是关于我的sketch.js 文件。当它有序时:

env.draw();
env.proc();

它运作良好,但当它是:

env.proc();
env.draw();

它的工作方式非常奇怪。 以下是快速预览:

运作良好:http://home.elka.pw.edu.pl/~eprokopc/goodGrav/index.html

工作不佳: http://home.elka.pw.edu.pl/~eprokopc/badGrav/index.html

Github 存储库: https://github.com/kekore/BadGravity

这两个示例仅在sketch.js 中的这两行顺序不同。我只是好奇为什么要这样画正方形。

【问题讨论】:

  • 您能发一个minimal reproducible example 来说明问题吗?请注意,这不应该是您的完整程序,而应该只是足够的代码,以便我们可以复制并粘贴它来自己查看问题。
  • 当然。你在这里 alpha.editor.p5js.org/kekore/sketches/SyI2IJrSm 奇怪的是,它绘制了不同大小的正方形,即使在这个例子中正方形的大小是用常数数字硬编码的。
  • 调试所有代码非常困难。你有一个更简单的例子来隔离错误的行为吗?像画一个硬编码的正方形这样简单的东西?
  • 当然。我试图重写它,所以它只使用两个基本类。我希望它现在更简单。只需在 draw() 函数中评论 rects:alpha.editor.p5js.org/kekore/sketches/BkT-ExBrm
  • 看看对规模的呼吁。比例将改变一切的绘制方式。如果您在 force.scaleTo 调用上方绘制矩形,您将获得良好的行为。如果您在调用缩放后绘制矩形,则会将缩放应用于矩形和不良行为

标签: drawing p5.js drawing2d


【解决方案1】:

大小根据调用 draw 和 proc 的位置而变化的“奇怪”行为是由 Vector 类中对 scaleTo 的调用引起的。 Vector scaleTo 调用 scale ,它调用 p5 scale 函数,即使 Vector 有自己的 scale 函数。

class Vector{
    constructor(initX,initY){
        this.x = initX;
        this.y = initY;
    }
    scale(a){
        this.x = this.x * a;
        this.y = this.y * a;
    }
    scaleNC(a){
    return new Vector(this.x*a,this.y*a);
    }
    scaleTo(len){
        scale(len/this.length());
    }
}

如果想要的行为是让 scaleTo 调用 Vector.scale 修改 scaleTo:

scaleTo(len){
    this.scale(len/this.length());
}

【讨论】:

  • 是的。我很久以前就想出来了,但我忘了在这里提到它。但是,我感谢您的努力!
  • 没问题。这个问题的年龄并没有减少它的有用性。我认为这是一个很好的地方来展示 js 代码中的范围问题是多么容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
  • 2021-10-08
  • 2023-01-25
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多