Processing 在处理时使用curveVertex()设置曲线动画

Processing 在处理时使用curveVertex()设置曲线动画,processing,curve,Processing,Curve,我试图在处理时实现一个动画螺旋曲线,以便在每个draw()函数中逐步构建曲线。我已经成功地创建了静态形状的曲线-现在我正在尝试进一步 然而,不幸的是,尽管我付出了努力,我的代码似乎还是不起作用。等待一段时间后,我再次获得形状静态,并显示以下错误消息: 必须在curveVertex()之前使用beginShape()或beginShape(多边形) 与此消息相反,我已经有了一条beginShape()指令(可能在错误的位置?) 这是我的密码: float x,y; 浮动步长; 浮动角; 整数计数器

我试图在处理时实现一个动画螺旋曲线,以便在每个draw()函数中逐步构建曲线。我已经成功地创建了静态形状的曲线-现在我正在尝试进一步

然而,不幸的是,尽管我付出了努力,我的代码似乎还是不起作用。等待一段时间后,我再次获得形状静态,并显示以下错误消息:

必须在curveVertex()之前使用beginShape()或beginShape(多边形)

与此消息相反,我已经有了一条beginShape()指令(可能在错误的位置?)

这是我的密码:

float x,y;
浮动步长;
浮动角;
整数计数器;
无效设置(){
大小(900600);
背景(255);
帧率(30);
光滑的();
//仰泳();
冲程(0);
x=0;
y=0;
步长=6;
角度=弧度(270);
计数器=0;
}
作废提款(){
平移(宽度/3,高度/2);
如果(计数器==0){
beginShape();
curveVertex(x,y);//初始控制点
}否则{
如果(步长>1.0){
curveVertex(x,y);
x=x+cos(角度)*步长;
y=y+sin(角度)*步长;
步长=步长*0.99;
角度=角度-弧度(1.5);
}否则{
//返回上一个控制点的上一个x、y值
角度=角度+弧度(1.5);
步长=步长/0.99;
y=y-sin(角度)*步长;
x=x-cos(角度)*步长;
curveVertex(x,y);//最后一个控制点
endShape();
}
}
计数器++;
}
提前感谢您提供的任何帮助!
-Ilias

尝试在对
draw()
函数的多个调用之间拆分
beginShape()
curveVertex()
endShape()
组似乎很奇怪

相反,你应该跟踪你想画的每一个点-一个
ArrayList
在这里很有用。要绘制曲线,只需在
ArrayList
上迭代并绘制每个点。要延伸曲线,只需向其添加一个
PVector

float步长=6.0;
浮动角度=弧度(270);
ArrayList points=新的ArrayList();
无效设置(){
大小(900600);
帧率(30);
添加(新PVector(0,0));
}
作废提款(){
背景(255);
平移(宽度/3,高度/2);
//引申
beginShape();
对于(PVector点:点){
curveVertex(点x,点y);
}
endShape();
如果(步长>1.0){
//添加一个新点
PVector prevPoint=points.get(points.size()-1);
浮动x=上一点x+cos(角度)*步长;
浮动y=上一点。y+sin(角度)*步长;
添加(新的PVector(x,y));
步长=步长*0.99;
角度=角度-弧度(1.5);
}
}

您可以只存储最近绘制的点并累积绘制调用,但重新绘制每个点可能是解决这类问题的最常见方法。

谢谢Kevin的聪明回答!我非常了解增强循环,这是我以前不知道的