p5.js - 创建嘈杂字体动画
问题描述
所以我必须创建一个看起来像下面的输出的嘈杂字体。
我的嘈杂字体必须遵循以下说明:
在 for 循环中,计算从 noise() 函数生成的值 nX。将正确缩放的 frameCount 传递给 noise() 函数。将其映射到 -amt 和 amt 之间的值,其中 amt 等于 20。
将从 map() 返回的值添加到每个点的坐标。对 nY 做同样的事情。如果你做对了,整个单词应该沿对角线移动。
通过将 point´sx 和 y 坐标添加到 frameCount 并将其传递给噪声,使每个点的 nX 不同。对 nY 做同样的事情。如果你做对了,现在每个点都应该为其他点独立移动,但它们仍然每个都沿对角线移动。
向传递给 nY 的参数添加一个数字(任何数字)。这样,当 nY 从噪声图中的不同点读取时,我们将 nX 和 nY 值彼此分离。
与amt一起玩。将其设置为依赖于 mouseX 并使其范围为 0 到 80。
但是,我的输出与所需的输出不匹配。下面是我的代码:
var points;
var font;
function preload() {
font = loadFont('assets/Calistoga-Regular.ttf');
}
//////////////////////////////////////////////////////////////////////
function setup() {
createCanvas(900, 400);
fill(255, 104, 204, 150);
noStroke();
points = font.textToPoints('c o d e', 50, 300, 300, {
sampleFactor: .3,
simplifyThreshold: 0
});
}
//////////////////////////////////////////////////////////////////////
function draw() {
fill(0,5);
rect(0,0,width,height);
for(var i=0;i<points.length;i++){
fill(255, 104, 204, 150);
var point = points[i];
var pX = frameCount+point.x;
var pY = frameCount+point.y+5;
var nX = noise(pX);
var nY = noise(pY);
var amt = map(mouseX, 0, 20, 0, 80);
var mX = map(nX,0,pX,-amt,amt);
var mY = map(nY,0,pY,-amt,amt);
var x = point.x + random(-mX, mX);
var y = point.y + random(-mY, mY);
ellipse(x,y,10,10);
}
}
解决方案
我假设你的问题是字体太吵了?在这种情况下,问题在于您映射amt
到的值太高。这是因为您告诉它范围是0
to 20
,但实际范围是0
to width
。要解决这个问题,请替换:
var amt = map(mouseX, 0, 20, 0, 80)
有了这个:
var amt = map(mouseX, 0, width, 0, 80);
编辑:您的代码中有几个问题:
在说明中,它说: “将正确缩放的 frameCount 传递给 noise() 函数”。在您的代码中,您不会缩放帧数(例如,将其乘以一个小数0.1
)。
“通过添加 point´sx 和 y 坐标使每个点的 nX 不同”。在您的代码中,您仅添加point.x
到framecount
forpX
并且仅添加 point.y for pY
。
此外,当它仅从to时,您正在映射nx
from 0
to (函数总是如此)。pX
0
1
noise()
最后一个问题是您正在使用该random()
功能。如果您正在使用该random()
功能,则值将永远不会平滑更改,并且路径将不会连接。这是固定代码:
var point = points[i];
var pX = (frameCount * 0.1) + point.x + point.y;
var pY = pX + 5;
var nX = noise(pX);
var nY = noise(pY);
var amt = map(mouseX, 0, width, 0, 80);
var mX = map(nX,0,1,-amt,amt);
var mY = map(nY,0,1,-amt,amt);
var x = point.x + mX;
var y = point.y + mY;
如果要更改轨迹的平滑程度,可以更改为0.1
推荐阅读
- javascript - 删除画布的函数
- excel - VBA with Selenium - 想要通过 VBA Selenium 在特定站点上上传图像
- azure - 是否需要 Windows 10 Pro 才能将 ASP.NET Core Web 应用程序发布到 Azure?
- javascript - 获取请求未加载 PHP 脚本
- javascript - 完成录制按钮将旧屏幕录制再次保存到本地文件夹
- javascript - 尝试使用 JavaScript 减少 HTML 代码的重复
- xml - 混合元素(具有值和子元素的元素)DTD
- android - E/ModelDownloadManager:模型与TFLite不兼容且app未升级,请勿下载
- javascript - × TypeError:无法读取未定义的属性“图像”
- javascript - Laravel 无限滚动分页(x)与 Like 系统 - Over x post like/unlike 不起作用但如果 post id <= x 则有效