2012-11-19 31 views
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); 
    } 

任何人都可以向我解释如何将其更改为更面向对象的形式吗?这是在处理中。

回答

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; 
} 

请注意:改变对象的类名和数组的大小按你的计划。

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