Processing 使两个对象以相同的速率增长?

Processing 使两个对象以相同的速率增长?,processing,Processing,我已经编写了这个程序,它工作正常,但茎和花的生长速度不同。我怎样才能使两者以同样的速度增长?我已经为此挣扎了一两天,我知道这看起来很简单,但对我来说很痛苦:P无法轻松同步这两个动画的原因是因为茎基于帧数生长,而花基于的比率不是基于帧数或帧率生长。我很快修改了你的Flower类,以说明问题所在: 在Flower.display()方法中调用任何内容之前: scale(-min((float)(frameCount)/250, 1), min((float)(frameCount)/250, 1))

我已经编写了这个程序,它工作正常,但茎和花的生长速度不同。我怎样才能使两者以同样的速度增长?我已经为此挣扎了一两天,我知道这看起来很简单,但对我来说很痛苦:P

无法轻松同步这两个动画的原因是因为茎基于帧数生长,而花基于的比率不是基于帧数或帧率生长。我很快修改了你的Flower类,以说明问题所在:

Flower.display()方法中调用任何内容之前:

scale(-min((float)(frameCount)/250, 1), min((float)(frameCount)/250, 1));
factor = maxFactor;
sizes = maxSize;
这类似于缩放茎的方式

Flower.grow()方法中:

scale(-min((float)(frameCount)/250, 1), min((float)(frameCount)/250, 1));
factor = maxFactor;
sizes = maxSize;
这是草率的,但很快。只需强制花朵以其最大尺寸绘制,而上面的修改会缩放它

以下是完整的源代码,包括注释和注释代码:

Stem myStem;
 Circle circles[];
 Flower flowers = new Flower();
 float scaleFactor=0.5;

 void setup() {
   size(floor(400*scaleFactor), floor(800*scaleFactor));
   myStem = new Stem(200, 800);
   flowers = new Flower (0, 0);
   //moved this to setup, no need to recreate each frame
   circles = new Circle[6];
   circles[0]  = new Circle(0, -40, 50, 50);
   circles[1]  = new Circle(0, -40, 50, 50);
   circles[2]  = new Circle(0, -40, 50, 50);
   circles[3]  = new Circle(0, -40, 50, 50);
   circles[4]  = new Circle(0, -40, 50, 50);
   circles[5]  = new Circle(0, 0, 50, 50);
   // also smooth only needs to be called once
   // unless ther is a noSmooth() somewhere
   smooth();
   }

   void draw() {

   float grow = 0;
   //translate(myStem.initalloX, myStem.initalloY);  
   myStem.drawStem();
   //set centre point
   translate(myStem.initalloX, ((frameCount>250)?myStem.initalloY-       500:myStem.initalloY-(2*frameCount)));
   if (frameCount>10) {
     flowers.grow();
     flowers.display();
     }
   } 

   class Stem { 
     int initalloX=200;
     int initalloY=800;

     Stem(int tempInitalloX, int tempInitalloY) {
      initalloX = tempInitalloX;
      initalloY = tempInitalloY;
     }

 void drawStem() {
   background(#0DBADB);
   scale(scaleFactor, scaleFactor);
   stroke (12, 149, 11);
   fill (12, 149, 11);
   strokeWeight(10);
   line(initalloX, initalloY, initalloX, ((frameCount>250)?initalloY-500:initalloY-(2*frameCount)));
   //stem1
   if (frameCount>101) {
      noStroke();
      translate(initalloX, initalloY-200);
      scale(min((float)(frameCount-100)/100, 1), min((float)(frameCount-100)/100, 1));
      beginShape();
      vertex(0, 0);
      bezierVertex(-40, -5, -30, -40, -80, -20);
      bezierVertex(-47, -16, -52, 8, 0, 0);
      endShape(CLOSE);
      scale(1/min((float)(frameCount-100)/100, 1), 1/min((float)(frameCount-100)/100, 1));
      translate(-initalloX, -(initalloY-200));
      noStroke();
    }
    //stem2
    if (frameCount>151) {
     //  noStroke();
     translate(initalloX, initalloY-300);
     scale(-min((float)(frameCount-150)/150, 1), min((float)(frameCount-150)/150, 1));
     beginShape();
     vertex(0, 0);
     bezierVertex(-40, -5, -30, -40, -80, -20);
     bezierVertex(-47, -16, -52, 8, 0, 0);
     endShape(CLOSE);
     scale(-1/min((float)(frameCount-150)/150, 1), 1/min((float)(frameCount-150)/150, 1));
     translate(-initalloX, -(initalloY-300));
     }
   }
 }

 class Circle {

   int c1 = 0;
   int c2 = -40;
   float c3 = 50;
   float c4 = 50;

   Circle(int tc1, int tc2, float tc3, float tc4) {
   c1 = tc1;
   c2 = tc2;
   c3 = tc3;
   c4 = tc4;
   }
  }

 class Flower {

 float centerX;
 float centerY;
 float posX;
 float posY;
 float maxSize = 51;
 float maxFactor = 40;
 float sizes = 0;
 float factor = 0;
 float speed = 0.17;

 Flower() {
 }
 Flower(float _centerX, float _centerY)
 {
  centerX = _centerX;
  centerY = _centerY;
 }
 void setCenter(float x, float y)
 {
  centerX = x;
  centerY = y;
 }
 void display()
 {
   // added line below
   scale(-min((float)(frameCount)/250, 1), min((float)(frameCount)/250, 1));
   for (int i = -18; i < 360; i+=72)
   {
      posX = centerX + cos(radians(i)) * factor;
      posY = centerY + sin(radians(i)) * factor;
     noStroke();
     fill(170, 14, 24); // blue
     ellipse(posX, posY, sizes, sizes);
   }
   fill(14, 17, 170);
   ellipse(centerX, centerY, sizes , sizes );
 }
 void grow()
 {
//   factor = (factor < maxFactor )?  factor + speed: maxFactor;
//   sizes = (sizes < maxSize )?  sizes + speed*1.3 : maxSize;
   // modified line below
   factor = maxFactor;
   sizes = maxSize;
 }
}// end of Flower
Stem-myStem;
圆圈[];
鲜花=新花();
浮点数比例因子=0.5;
无效设置(){
尺寸(地板(400*scaleFactor)、地板(800*scaleFactor));
myStem=新茎(200800);
花=新花(0,0);
//将此移到设置,无需重新创建每个帧
圆圈=新圆圈[6];
圆[0]=新的圆(0,-40,50,50);
圆[1]=新的圆(0,-40,50,50);
圆[2]=新的圆(0,-40,50,50);
圆[3]=新的圆(0,-40,50,50);
圆[4]=新的圆(0,-40,50,50);
圆[5]=新的圆(0,0,50,50);
//同样,平滑只需要调用一次
//除非某处有一个不光滑的地方
光滑的();
}
作废提款(){
浮动增长=0;
//翻译(myStem.initalloX、myStem.initalloY);
myStem.drawStem();
//设置中心点
翻译(myStem.initalloX,((frameCount>250)?myStem.initalloY-500:myStem.initalloY-(2*frameCount));
如果(帧数>10){
花。生长();
花。展示();
}
} 
类干{
int initalloX=200;
int=800;
阀杆(int tempInitalloX、int tempInitalloY){
initalloX=tempInitalloX;
initalloY=tempInitalloY;
}
空抽杆(){
背景(#0DBADB);
scale(scaleFactor,scaleFactor);
中风(12、149、11);
填充(12、149、11);
冲程重量(10);
线(initalloX,initalloY,initalloX,((帧数>250)?initalloY-500:initalloY-(2*帧数));
//stem1
如果(帧数>101){
仰泳();
翻译(initalloX,initalloY-200);
刻度(最小((浮动)(帧数-100)/100,1),最小((浮动)(帧数-100)/100,1));
beginShape();
顶点(0,0);
贝塞尔顶点(-40,-5,-30,-40,-80,-20);
贝塞尔顶点(-47,-16,-52,8,0,0);
端形(闭合);
刻度(1/min((浮动)(帧数-100)/100,1),1/min((浮动)(帧数-100)/100,1));
翻译(-initalloX,-(initalloY-200));
仰泳();
}
//stem2
如果(帧数>151){
//仰泳();
翻译(initalloX,initalloY-300);
刻度(-min((浮动)(帧数-150)/150,1),min((浮动)(帧数-150)/150,1));
beginShape();
顶点(0,0);
贝塞尔顶点(-40,-5,-30,-40,-80,-20);
贝塞尔顶点(-47,-16,-52,8,0,0);
端形(闭合);
刻度(-1/min((浮动)(帧计数-150)/150,1),1/min((浮动)(帧计数-150)/150,1));
翻译(-initalloX,-(initalloY-300));
}
}
}
班级圈子{
int c1=0;
int c2=-40;
浮动c3=50;
浮球c4=50;
圆(整数tc1、整数tc2、浮点tc3、浮点tc4){
c1=tc1;
c2=tc2;
c3=tc3;
c4=tc4;
}
}
班级花{
浮动中心;
中心浮动;
浮动posX;
浮标;
浮点最大值=51;
浮点最大因子=40;
浮动大小=0;
浮动系数=0;
浮动速度=0.17;
花(){
}
花(浮动中心,浮动中心)
{
centerX=_centerX;
centerY=_centerY;
}
无效设置中心(浮动x、浮动y)
{
centerX=x;
centerY=y;
}
无效显示()
{
//在下面添加了一行
刻度(-min((浮动)(帧数)/250,1),min((浮动)(帧数)/250,1);
对于(int i=-18;i<360;i+=72)
{
posX=中心x+cos(弧度(i))*系数;
posY=中心轴+正弦(弧度(i))*系数;
仰泳();
填充(170、14、24);//蓝色
椭圆(posX、posY、尺寸、尺寸);
}
填充(14、17、170);
椭圆(centerX、centerY、尺寸、尺寸);
}
void grow()
{
//因子=(因子<最大因子)?因子+速度:最大因子;
//尺寸=(尺寸<最大尺寸)?尺寸+速度*1.3:最大尺寸;
//下面的修改行
因子=最大因子;
尺寸=最大尺寸;
}
}//花期

现在很难回答这个问题。代码太多,不容易运行以查看问题,并且问题描述有点模糊。你能给我们一个更简洁的问题片段吗?也许删除那些不影响结果的项目?当你这样做的时候,你甚至可能会自己发现问题。