Loops 有人看到我的代码(无法将int转换为boolean)处理的问题吗

Loops 有人看到我的代码(无法将int转换为boolean)处理的问题吗,loops,rotation,processing,Loops,Rotation,Processing,我试图创造一个相反的局面。一次只能看到一个圆圈 我已经修改了我的代码 int nbr_circles = 2; void setup() { size(600, 600); smooth(); background(255); } void draw() { background(255); float cx = width/2.0; float cy = height/2.0; fill(0); //float x, y; // for (int i = 0; i < nbr_cir

我试图创造一个相反的局面。一次只能看到一个圆圈

我已经修改了我的代码

int nbr_circles = 2;
void setup() {
size(600, 600);
smooth();
background(255);
}

void draw() {
background(255);
float cx = width/2.0;
float cy = height/2.0;
fill(0);
//float x, y; //
for (int i = 0; i < nbr_circles; i++)
{
float angle = i * TWO_PI / nbr_circles;
float x = cx + 110.0 * cos(angle);
float y = cy + 110.0 * sin(angle);
ellipse(x, y, 20, 20);
}
}

void mousePressed() {

if (mouseButton == LEFT) {
if (nbr_circles < 20)
nbr_circles = nbr_circles + 1;

} else if (mouseButton == RIGHT) {
if (nbr_circles > 2)
nbr_circles = nbr_circles - 1;

}
}
int nbr\u圆圈=2;
无效设置(){
大小(600600);
光滑的();
背景(255);
}
作废提款(){
背景(255);
浮动cx=宽度/2.0;
浮动cy=高度/2.0;
填充(0);
//浮动x,y//
对于(int i=0;i2)
nbr_圈=nbr_圈-1;
}
}
对此

int nbr_circles = 1;
void setup() {    
  size(600, 600);
  smooth();
  background(255);
} 

void draw() { 
  float cx = width/2.0;
  float cy = height/2.0;
  fill(0);
  //float x, y; //
  for (int i = 0; i < nbr_circles; i++)
  {  
    float angle = i * TWO_PI / nbr_circles;
    float x = cx + 110.0 * cos(angle);                
    float y = cy + 110.0 * sin(angle);                
    ellipse(x, y, 20, 20);
  }
  for (int i = 0; i = nbr_circles; i++)
  {
    translate (width/2.0, height/2.0);
    rotate (radians());
  }
}
int nbr\u圆圈=1;
无效设置(){
大小(600600);
光滑的();
背景(255);
} 
void draw(){
浮动cx=宽度/2.0;
浮动cy=高度/2.0;
填充(0);
//浮动x,y//
对于(int i=0;i
但在第二个for循环中,出现一个错误,称为“无法将int转换为boolean”

我相信这不是唯一的错误


有人能看出我错在哪里吗?

他指的是(inti=0;I=nbr\u圈;I++)的
这个
=
没有意义,它应该是停止循环的一个条件,
=
做一个赋值,在这种情况下没有意义。它可能是
=
,但是有了这个循环就没有意义了……也许你想要一个
,如果我理解了你试图正确完成的事情,我不认为你需要甚至需要第二个循环。第一个循环中,你已经得到了所有圆位置的计算,所以现在你只需要弄清楚如何一次只显示一个,对吗

您上面的评论表明您刚刚开始处理(可能是一般的编程),所以如果我对您已经知道的事情说得太多,请原谅

我要做的是:不必在draw()函数中计算每帧上所有圆的位置,只需在setup()中计算一次并将位置存储在数组中。处理过程中有一个方便的对象,即PVector类,可用于轻松地将这些位置存储为x和y值。因此,在代码顶部,在nbr_圆的变量声明之后,可以声明一个PVector数组,该数组将存储所有圆位置,如下所示:

PVector[] circles = new PVector[nbr_circles];
然后,您可以将计算圆位置的代码移动到setup()中,而不是在计算点显示圆,而是将值存储在数组中:

void setup() {    
    size(600, 600);
    smooth();
    background(255);

    float cx = width/2.0;
    float cy = height/2.0;
    for (int i = 0; i < nbr_circles; i++)
    {  
        float angle = i * TWO_PI / nbr_circles;
        float x = cx + 110.0 * cos(angle);                
        float y = cy + 110.0 * sin(angle);                
        circles[i] = new PVector(x, y);
    }
}
在draw()函数中,我们可以每次递增计数器,并将该值用作数组索引。当然,一旦计数器变量大于数组中的元素数,我们需要将其设置回0。模运算符(%)在这里可以帮助我们,它基本上返回两个数除后的余数。现在我们可以简单地将计数器变量每次增加一(使用递增运算符,++),并使用模运算符始终获得从0到(nbr_圆-1)的数字。下面是我的draw()函数:

void draw() { 
    background(255);
    fill(0);

    int i = counter % nbr_circles;
    ellipse(circles[i].x, circles[i].y, 20, 20);
    counter++;
}
你会注意到圆圈绕着循环转得很快;这是因为我相信默认帧速率(每秒调用draw()函数的次数)是30。幸运的是,在setup()中有一个简单的函数可以调用函数,可将帧速率设置为所需的任何值。如果要降低速度,请尝试每秒5帧:

frameRate(5);

把这些放在一起,你就应该拥有它!

=
是作业,
=
是平等检查。另外,你不应该检查为
i@shree.pat18我理解的远比你给我的学分少!我两天前才开始学习。你是什么意思?我知道=和==之间的区别,你的第二个循环应该当i超过所需的圈数时终止。这是小于或等于条件将检查的。
int counter = 0;
void draw() { 
    background(255);
    fill(0);

    int i = counter % nbr_circles;
    ellipse(circles[i].x, circles[i].y, 20, 20);
    counter++;
}
frameRate(5);