Javascript 将setTimeout应用于p5.js中的递归树
我正在使用p5.js在html5 convas中创建成长树。 我希望平滑地生成以下树,而不是立即生成 函数设置{ CreateCanvas600600; 诺洛普; } 函数绘制{ 背景255; 冲程重量10; 平移宽度/2,高度-20; 分枝0; } 函数branchdepth{ 如果深度<10{ line0,0,0,-height/10;//向上画一条线 { translate0,-height/10;//向上移动空间 旋转度-0.05,0.05;//随机摆动 如果随机数为1.0<0.6{// rotate0.3;//向右旋转 scale0.8;//按比例缩小 push;//现在保存转换状态 branchdepth+1;//开始一个新的分支! pop;//返回到已保存状态 旋转-0.6;//向左旋转 push;//保存状态 branchdepth+1;//启动第二个新分支 pop;//返回到已保存状态 } else{//无分支-在相同深度继续 分支深度; } } } } 函数{ 重画; } html,正文{ 保证金:0; 填充:0; } 您可以使用async并等待 定义一个实用函数,该函数返回在给定延迟后解析的承诺:Javascript 将setTimeout应用于p5.js中的递归树,javascript,recursion,html5-canvas,settimeout,p5.js,Javascript,Recursion,Html5 Canvas,Settimeout,P5.js,我正在使用p5.js在html5 convas中创建成长树。 我希望平滑地生成以下树,而不是立即生成 函数设置{ CreateCanvas600600; 诺洛普; } 函数绘制{ 背景255; 冲程重量10; 平移宽度/2,高度-20; 分枝0; } 函数branchdepth{ 如果深度setTimeoutresolve,ms; 异步函数branchdepth{ 如果深度setTimeoutresolve,ms; 异步函数branchdepth{ 如果深度
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
使您的分支函数异步—只需在它前面加上该关键字即可
在进行三个递归调用之前添加wait。例如:
await branch(depth+1);
添加新行以引入延迟:
if (depth < 10) {
await delay(10); // "sleep" for 10 milliseconds.
// ...
结果是:
函数设置{
CreateCanvas600600;
诺洛普;
}
函数绘制{
背景255;
冲程重量10;
平移宽度/2,高度-20;
分枝0;
}
const delay=ms=>new Promiseresolve=>setTimeoutresolve,ms;
异步函数branchdepth{
如果深度<10{
等待延迟10;
line0,0,0,-height/10;//向上画一条线
{
translate0,-height/10;//向上移动空间
旋转度-0.05,0.05;//随机摆动
如果随机数为1.0<0.6{//
rotate0.3;//向右旋转
scale0.8;//按比例缩小
push;//现在保存转换状态
等待branchdepth+1;//开始一个新的分支!
pop;//返回到已保存状态
旋转-0.6;//向左旋转
push;//保存状态
等待branchdepth+1;//启动第二个新分支
pop;//返回到已保存状态
}
else{//无分支-在相同深度继续
等待分支深度;
}
}
}
}
函数{
重画;
}
您可以使用async并等待
定义一个实用函数,该函数返回在给定延迟后解析的承诺:
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
使您的分支函数异步—只需在它前面加上该关键字即可
在进行三个递归调用之前添加wait。例如:
await branch(depth+1);
添加新行以引入延迟:
if (depth < 10) {
await delay(10); // "sleep" for 10 milliseconds.
// ...
结果是:
函数设置{
CreateCanvas600600;
诺洛普;
}
函数绘制{
背景255;
冲程重量10;
平移宽度/2,高度-20;
分枝0;
}
const delay=ms=>new Promiseresolve=>setTimeoutresolve,ms;
异步函数branchdepth{
如果深度<10{
等待延迟10;
line0,0,0,-height/10;//向上画一条线
{
translate0,-height/10;//向上移动空间
旋转度-0.05,0.05;//随机摆动
如果随机数为1.0<0.6{//
rotate0.3;//向右旋转
scale0.8;//按比例缩小
push;//现在保存转换状态
等待branchdepth+1;//开始一个新的分支!
pop;//返回到已保存状态
旋转-0.6;//向左旋转
push;//保存状态
等待branchdepth+1;//启动第二个新分支
pop;//返回到已保存状态
}
else{//无分支-在相同深度继续
等待分支深度;
}
}
}
}
函数{
重画;
}
感谢@trincot您解决了造成延迟的主要问题。请注意添加内容,您可能会发现有用的信息。感谢@trincot您解决了造成延迟的主要问题。请注意添加内容,您可能会发现有用的信息。