在打字稿类中导入 p5

时间:2021-07-28 16:12:12

标签: typescript p5.js

我正在从 Coding train 学习一些 p5 的东西,但我在 Typescript/webpack 项目中编写所有东西。

我使用 p5 作为实例,我的代码运行良好,但我感觉我做错了什么。

import * as p5 from 'p5';

export class Particlehelper {
  private pos: p5.Vector;
  private vel: p5.Vector;
  private accl: p5.Vector;

  public constructor(p: p5) {
    this.pos = p.createVector(p.random(p.windowWidth), p.random(p.windowHeight));
    // this.vel = p.createVector(0, 0);
    this.vel = p5.Vector.random2D();
    this.accl = p.createVector(0, 0);
  }

这里让我感到困惑的是 - 我正在导入 P5,因为我需要类属性为 Vector 类型,但是为了实例化向量,我将 P5 从索引文件传递给构造函数。

particles[i] = new Particlehelper(p);

我有一种感觉是错误的 - 在我看来,我正在做同样的事情两次,但我无法解开如何在课堂上使用刚刚导入的 p5。

同样 - 我从未见过“公共构造函数”表示法,但 linter 强迫我在那里添加它 - 不确定这是否可以?

谢谢,

1 个答案:

答案 0 :(得分:0)

这段代码没问题。 p5.Vector 的问题在于它有点奇怪,因为它 1) 没有声明它是实际的构造函数参数,2) 可以使用对 p5 实例的引用来构造。这样做的原因是 p5.Vector 上有一些函数将草图 angleMode 考虑在内(DEGREESRADIANS)。当您使用 p5.Vector 创建 createVector 时,生成的向量具有对 p5 实例的引用,并且将遵守其角度模式。但是你也可以静态地创建一个向量,这样创建的向量不会尊重草图角度模式:

    p.angleMode(p.DEGREES);

    let v1 = p.createVector(1, 0);
    let v2 = p.createVector(0, 1);
    // Result is in degrees
    console.log(v1.angleBetween(v2));

    v1 = new p5.Vector();
    v1.set(1, 0);
    v2 = new p5.Vector();
    v2.set(0, 1);
    // Result is in radians
    console.log(v1.angleBetween(v2));

请注意,p5.Vector.random2d 还将创建一个使用默认角度模式(弧度)的矢量。