0

Could anyone share with me why I am getting this error? Basically it's a program where I want to simulate basic basic plant growth. I want to do it in such a way that the petals are all stored in an array of circles.

Stem myStem;
Circle circles;

float scaleFactor=0.5;

void setup() {
  size(floor(400*scaleFactor), floor(800*scaleFactor));
  myStem = new Stem(200,800);

}

void draw() {

  background(150);
  smooth();
  Circle circles[];
  circles = new Circle[5];
  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);

  for (int i = 0; i < circles.length; i++) {
   circles = ellipse(circles[i].c1, circles[i].c2, circles[i].c3, circles[i].c4);
   rotate(radians(72));
   circles[i] = Circle;
  }

  myStem.drawStem();

}

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));
    }
    //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;
  int c3 = 50;
  int c4 = 50;

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

Thanks in advance... All help is much appreciated.

4

4 に答える 4

1

配列を宣言するために私が推測する新しいことを学びました。

何が悪いのかというと、「circle」と呼ばれるCircle変数を使用していて、Circleと呼ばれることで、Circleの配列と混同しているようです。これは、おそらくあらゆる種類の問題を引き起こします。それはおそらくあなたが修正に集中すべきものです。

于 2012-11-20T07:08:53.273 に答える
1

推測...

クラスには2つの円の定義があります

        Circle circles

        Circle[] circles
于 2012-11-20T07:23:42.020 に答える
1

circles[i] = Circle;これはエラーだと思います。タイプ(クラスCircle)を変数(つまり、オブジェクトまたはクラスのインスタンス)に割り当てることはできません。

于 2012-11-20T07:24:23.063 に答える
1

すでに指摘したすべてのことに加えて、ellipse()はvoidメソッドであるため、何も返さないことに注意してください。したがって、のような行に circle = ellipse(x,y,z,z) は意味がありません。おそらく、ciclcle [i]に格納されている値を使用して楕円を描画したいので、それ ellipse(circles[i].c1, circles[i].c2, circles[i].c3, circles[i].c4); を割り当てる必要はありません。また、なぜ5つの等しい円を作成するのかわかりません。サークルオブジェクトがデータを保存しているだけの場合、なぜ同じデータを5回保存するのですか?呼び出し:

for (int i = 0; i < circles.length; i++) {
ellipse(0, -40, 50, 50);
rotate(radians(72));
}

同じ効果があります。

それに加えて、描画の最後にbackground()を呼び出すと(trough myStem.drawStem())、以前に描画されたものがすべて非表示になります。それでも、配列を再作成して1秒間に60回値を再割り当てする必要はなく、セットアップに移動できます。

私はあなたのコードにそれらの変更を加えました。これでコンパイルされます。それでも「花びら」は原点から描画されており、塗りつぶし/ストロークを処理する必要がありますが、少なくとも実行中です:)サークルクラスで表示メソッドを作成することをお勧めします...私が指摘したようにあなたが作った他の投稿で。乾杯!

Stem myStem;

//Circle circles; // double declaration
  Circle circles[]; // keeping the array one only

float scaleFactor=0.5;

void setup() {
  size(floor(400*scaleFactor), floor(800*scaleFactor));
  myStem = new Stem(200,800);

  //mpoved this to setup, no need to recreate each frame
  circles = new Circle[5];
  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);
  // also smooth only needs to be called once
  // unless ther is a noSmooth() somewhere
  smooth();

}

void draw() {

  // moved this here
  background(#0DBADB);

  for (int i = 0; i < circles.length; i++) {
   ellipse(circles[i].c1, circles[i].c2, circles[i].c3, circles[i].c4);
   // note you may use this instead
   //ellipse(0, -40, 50, 50);
   rotate(radians(72));
  }

  myStem.drawStem();


}



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

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

  }

  void drawStem() {
    //background(#0DBADB); // this was hiding all other draws
    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));
    }
    //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;
  int c3 = 50;
  int c4 = 50;

  Circle(int tc1, int tc2, int tc3, int tc4) {
    c1 = tc1;
    c2 = tc2;
    c3 = tc3;
    c4 = tc4;
  }
 }
于 2012-11-20T14:27:50.060 に答える