1

花びらを形成する円が配列に格納されるように、次のコードを変更する方法を考えていました。だから私は別の機能でそれを使うことができました。

   void setup() {
     size(400, 400);
     smooth();
     noStroke();
  // frameRate(15);
  }

  void draw() {
    String[] circles = new String[5];
    int c1 = 0;
    int c2 = -40;
    int c3 = 50;
    int c4 = 50;
   // set centre point
    translate(width/2, height/2);
    fill(#c6ff89); // green
    for (int i = 0; i < circles.length; i++) {
      ellipse(c1, c2, c3, c4);
       rotate(radians(72));

    }
   // centre circle
   fill(#fff9bb); // light yellow
   ellipse(0, 0, 50, 50);
  }

これをよりオブジェクト指向の形式に変更する方法を誰かに説明してもらえますか? これは処理中です。

4

2 に答える 2

2

ellipseあなたがオブジェクトを返していると仮定し、作成Eclipseしたい場合5 circlesは、クラス変数として配列を作成しますprivate Eclipse[] myCircles = new Eclipse[5]。次に、forループを次のように変更します。

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

注:オブジェクト クラス名と配列サイズは、プログラムに従って変更してください。

于 2012-11-19T04:23:20.973 に答える
2

注: コードのとおり、String[] 円は使用できません...

ここでは、処理方法で例を書きました...お役に立てば幸いです:

//an array of your class type
Flower[] flowers = new Flower [3];
// one alone..
Flower atMouse = new Flower(0, 0);

void setup() {
  size(400, 400);

  // initialize objects
  for (int i=0; i < flowers.length;i++)
  {
    int pos = i+1;
    flowers[i] = new Flower (pos*100, pos*100);
  }
  smooth();
  background(255);
}

void draw() {
  background(255);
  for (int i=0; i < flowers.length;i++)
  {
    flowers[i].display();
  }

  atMouse.display(mouseX, mouseY);
}

class Flower {

  //class member variables
  float posX;
  float posY;
  int c1 = 0;
  int c2 = -40;
  int c3 = 50;
  int c4 = 50;

  // a constructor
  Flower(float _posX, float _posY)
  {
    //just pass vars
    posX = _posX;
    posY = _posY;
  }

  void display()
  {
    noStroke();
    pushMatrix();
    translate(posX, posY);
    fill(#c6ff89); // green
    for (int i = 0; i < 5; i++) {
      ellipse(c1, c2, c3, c4);
      rotate(radians(72));
    }
    popMatrix();
    // centre circle
    fill(#fff9bb); // light yellow
    ellipse(posX, posY, 50, 50);
  }

  //an overloaded version to keep pos updating...
  void display(float px, float py)
  {
    noStroke();
    pushMatrix();
    translate(px, py); // here use px instead...
    fill(#c6ff89); // green
    for (int i = 0; i < 5; i++) {
      ellipse(c1, c2, c3, c4);
      rotate(radians(72));
    }
    popMatrix();
    // centre circle
    fill(#fff9bb); // light yellow
    ellipse(px, py, 50, 50);//also here
  }
}//eofcl
于 2012-11-19T14:02:36.853 に答える