如何保存/存储随机函数的输出?

时间:2019-01-12 18:37:44

标签: javascript p5.js

我在不同季节编码一棵树(尽管树干和随机分支的原始代码不是我自己的)。对于冬天,我想让树保持随机,但还要有动画雪花。

但是,每次调用构成树的函数时,随机数(显然)是不同的。是否有一种方法可以保存函数(或其中的random()函数)的输出并仅绘制该输出?

draw()函数将调用生成树的函数,因此,如果多次调用该树,由于每次都会对其进行随机化,因此它将迅速改变。树函数必须重复自身才能绘制树,因此存在很多随机数。最终,我只想绘制一棵随机树,然后重复绘制同一棵树,以便draw函数可以重复运行而不遮盖该树。这是两行包含我要保存的随机数的代码:

rotate(random(-0.05,0.05));
    if (random(1.0) < 0.6) {

2 个答案:

答案 0 :(得分:1)

您要在此处使用randomSeed()函数。如果每次在draw()函数的顶部以相同的编号调用它,那么您将获得相同的“随机”树。如果更改数字,您将获得不同的“随机”树。如果您想要一棵新树(也许在单击鼠标时),则可以更改数字。例如:

let rs;

function setup() {
  rs = random(0, 1000);

  // your code
}

function draw() {
  randomSeed(rs);

  // your code
}

function mouseClicked {
  rs = random(0, 1000);
}

答案 1 :(得分:0)

您可以通过将值存储在变量中来做到这一点。这是一个简化的示例:

var x;
var y;

function setup(){
  createCanvas(500, 500);
  x = random(width);
  y = random(height);
}

function draw(){
  background(32);
  ellipse(x, y, 25, 25);
}

这只是一个简单的示例,但是您可以通过使用类似Tree类的东西来存储自己的值,从而获得更出色的效果。但是想法是一样的:只生成一次随机值,将其存储在变量中,然后在绘制时使用该变量。

您还可以将树绘制一次到缓冲区,然后将该缓冲区绘制到屏幕。 createGraphics()函数将在这种方法中派上用场。