初学者关于p5js print()函数的问题

Beginners' question on p5js print() function

我在 GitHub 上看到了一些已关闭的帖子,偶尔在 returns 上看到了类似的未解决问题,但我可以很好地解释为什么在 print() 上已定义对象的命令对象正在循环打印在控制台上:

刚开始用p5js,不懂javascript。所以它可能是放置命令的地方(function setup()function draw()),我仍然不确定为什么它们默认在编辑器起始页上,否则我需要指定我想要打印结果就一次 (?).

发生这种情况是因为 draw() 在循环中运行。在幕后, library is using requestAnimationFrame调用draw()

您可以将 print 语句移动到 setup() 函数中,该函数仅在脚本开始时运行一次。

function setup() {
  createCanvas(400, 400);
  c = createVector(0,0);
  print(c.toString());
}

function draw() {
  //print(c.toString());
  background(220);
}

或者,如果您愿意,可以按如下方式设置条件打印块:

var printed = false;
function setup() {
  createCanvas(400, 400);
  c = createVector(0,0);
  //print(c.toString());
}

function draw() {
  if (!printed) {
    print(c.toString());
    printed = true;
  }
  background(220);
}

注意:还可以考虑使用 toString method in the p5.Vector 对象以获得更清晰的输出。

如果您需要从 draw() 函数中调用的函数获取输出,您可以应用以下相同的原则:

var printed = false;

function setup(){
  createCanvas(400, 400);
  c = createVector(0,0);
  print(c);
}

function draw() {
  background(220);
}

function beingCalledWithinDraw(){
  if (!printed) {
    print(c);
    printed = true;
  }
}

可运行示例:

var printed = false;

function setup() {
  createCanvas(400, 400);
  c = createVector(0, 0);
  //print(c.toString());
}

function draw() {
  background(220);
  beingCalledWithinDraw();
}

function beingCalledWithinDraw() {
  if (!printed) {
    print(c.toString());
    printed = true;
  }
}
<script src="https://cdn.jsdelivr.net/npm/p5@1.4.0/lib/p5.min.js"></script>