就我的一生而言,我想不出一种方法来让这个草图以缓慢的速度运行,以清晰地看到移动的波浪图案.它的节奏快得令人发狂.它使用1D柏林噪声.

let gap = 10;
let start = 0;

function setup() {
  createCanvas(400, 400);
}

function draw() {
  background(20);
  noStroke();
  fill(225, 225, 0);
  translate(0, height / 2);

  for (let i = gap; i < width - gap; i += gap) {
    let n1 = noise(start);
    let noise1 = map(n1, 0, 1, 20, 150);
    rect(i, 0, 3, -noise1);
    start += 0.1;
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/p5.min.js"></script>

推荐答案

在for循环中,从相同的值开始多次调用noise(),并以相同的量递增,从而得到相同的高度条.

您还需要两种配料:

  1. 存储初始噪波值的数组(用于更新这些值)
  2. 使用不同的值初始化初始值.

就速度而言,只需减少增量值(start += 0.1;变为start += 0.001;)

我的意思是:

let gap = 10;
let start = new Array(39);

function setup() {
  createCanvas(400, 400);
  // init array with different values
  for(let  i = 0 ; i < 39; i++){
    start[i] = 0.1 * i;
  }
}

function draw() {
  background(20);
  noStroke();
  fill(225, 225, 0);
  translate(0, height / 2);

  for (let i = gap, nIndex = 0; i < width - gap; i += gap, nIndex++) {
    let n1 = noise(start[nIndex]);
    let noise1 = map(n1, 0, 1, 20, 150);
    rect(i, 0, 3, -noise1);
    start[nIndex] += 0.01;
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/p5.min.js"></script>

就个人而言,我会将for循环切换为使用索引进行迭代,而不是使用x位置偏移,但这可能是一个偏好问题:

let gap = 10;
let numBars = 42;
let noiseXValues = new Array(numBars);

function setup() {
  createCanvas(400, 400);
  // init array with different values
  for(let  i = 0 ; i < numBars; i++){
    noiseXValues[i] = 0.1 * i;
  }
}

function draw() {
  background(20);
  noStroke();
  fill(225, 225, 0);
  translate(0, height / 2);
  let barWidth = (width - gap) / numBars;
  for (let i = 0; i < numBars; i++) {
    let x = gap + (barWidth * i);
    let noiseValue = noise(noiseXValues[i]);
    let mappedNoiseValue = map(noiseValue, 0, 1, 20, 150);
    rect(x, 0, 3, -mappedNoiseValue);
    noiseXValues[i] += 0.01;
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/p5.min.js"></script>

Javascript相关问答推荐

窗口.getComputedStyle()在MutationObserver中不起作用

如何将连续的十六进制字符串拆分为以空间分隔的十六进制块,每个十六进制块包含32个二元组?

将2D数组转换为图形

PrivateRoute不是路由组件错误

google docs boldText直到按行执行应用脚本错误

在观察框架中搜索CSV数据

对网格项目进行垂直排序不起作用

使用API调用的VUE 3键盘输入同步问题

在JavaScript中将Base64转换为JSON

为什么我的Navbar.css没有显示在本地主机页面上?

对不同目录中的Angular material 表列进行排序

Refine.dev从不同的表取多条记录

在使用JavaScript以HTML格式显示Google Drive中的图像时遇到问题

JSX/React -如何在组件props 中循环遍历数组

每隔一行文本段落进行镜像(Boustrophedon)

需要从对象生成列表

将匿名函数附加到链接的onClick属性

当一条路由在Reaction路由中命中时,如何有条件地渲染两个组件或更改两个插座?

ReactJS Sweep Line:优化SciChartJS性能,重用wasmContext进行多图表渲染

TS node 找不到依赖的模块