Processing 加工中沿贝塞尔曲线的移动

Processing 加工中沿贝塞尔曲线的移动,processing,Processing,球在贝塞尔曲线中从起点到曲线中间移动的代码是: void ballMove() { if(y[0]==height*1/10) { bezier (x[0], y[0],x[1], y[1], x[2], y[2], x[3], y[3]); float x0; float x1; float x2; float x3; float y0; float y1; float y2; float y3; x

球在贝塞尔曲线中从起点到曲线中间移动的代码是:

     void ballMove()
    {

      if(y[0]==height*1/10)
      {

        bezier (x[0], y[0],x[1], y[1], x[2], y[2], x[3], y[3]);
      float x0; float x1; float x2; float x3; 
    float y0; float y1; float y2; float y3;

    x0 = x[0]; x1 = x[1]; x2 = x[2]; x3 = x[3]; 
    y0 = y[0]; y1 = y[1]; y2 = y[2]; y3 = y[3];


     float t =  (frameCount/100.0)%1;
      float x = bezierPoint(x0, x1, x2, x3, t);
      float y = bezierPoint( y0, y1, y2, y3, t);

       if(t>=0.5)
      {
        t=0;
      }

      while(t==0.5)
     {
       a=x;
       b=y;
     }
      while(t>0.5)
      {
        ellipse(a,b,30,30);
      }
      fill(255,0,0);
      if(t!=0)
      {
      ellipse(x, y, 15, 15);
      }
      }
    }
我已经定义了设置、绘制等中的所有内容,但我只想在按下空格键时将球从贝塞尔曲线的起点发射到中间一次

当前版本向我显示了循环。我该怎么做

尝试了返回、中断、更改t参数等所有操作,但代码不起作用。我是新手


你有什么建议吗?

你犯的最大错误是在计算了红球的
x
y
位置后,改变了
t
的值。为了避免这种情况,您需要首先计算[0,0.5]情况下[0,1]之间的
t
,然后根据程序的状态更改此值

frameCount
计算
t
时犯的第二个错误。首先使用模来提取数字[0,50],然后像这样将其映射到范围[0,0.5]

float t=(帧数%50)*0.01;
您还提到要在按下某个键后重复此动画。为此,您需要
按键
方法和一些全局变量来表示程序状态并存储动画的开始帧(因为
帧数
应该是只读的)。因此,可以实现如下基本功能:

boolean run=false;
浮点数f_start=0;
void ballMove(){
noFill();
贝塞尔(x0,y0,x1,y1,x2,y2,x3,y3);
浮点t=((帧数-f_开始)%50)*0.01;
if(run==false){
t=0;
}
浮点x=贝塞尔点(x0,x1,x2,x3,t);
浮动y=贝塞尔点(y0,y1,y2,y3,t);
填充(255,0,0);
椭圆(x,y,5,5);
}
按下void键(){
跑=!跑;
f_start=帧数;
}

希望这对你有帮助。下次请发一封邮件,这样我们就不需要跟你的代码较量了。

你犯的最大错误是在你计算了红球的
x
y
位置后改变了
t
的值。为了避免这种情况,您需要首先计算[0,0.5]情况下[0,1]之间的
t
,然后根据程序的状态更改此值

frameCount
计算
t
时犯的第二个错误。首先使用模来提取数字[0,50],然后像这样将其映射到范围[0,0.5]

float t=(帧数%50)*0.01;
您还提到要在按下某个键后重复此动画。为此,您需要
按键
方法和一些全局变量来表示程序状态并存储动画的开始帧(因为
帧数
应该是只读的)。因此,可以实现如下基本功能:

boolean run=false;
浮点数f_start=0;
void ballMove(){
noFill();
贝塞尔(x0,y0,x1,y1,x2,y2,x3,y3);
浮点t=((帧数-f_开始)%50)*0.01;
if(run==false){
t=0;
}
浮点x=贝塞尔点(x0,x1,x2,x3,t);
浮动y=贝塞尔点(y0,y1,y2,y3,t);
填充(255,0,0);
椭圆(x,y,5,5);
}
按下void键(){
跑=!跑;
f_start=帧数;
}
希望这对你有帮助。下次请发布一个,这样我们就不需要与您的代码发生冲突。

您可以发布一个替代断开连接的方法吗?您可以发布一个替代断开连接的方法吗?