Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将setTimeout应用于p5.js中的递归树_Javascript_Recursion_Html5 Canvas_Settimeout_P5.js - Fatal编程技术网

Javascript 将setTimeout应用于p5.js中的递归树

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{ 如果深度

我正在使用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并等待

定义一个实用函数,该函数返回在给定延迟后解析的承诺:

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您解决了造成延迟的主要问题。请注意添加内容,您可能会发现有用的信息。