有条件的循环 - 处理

时间:2018-05-21 05:07:38

标签: java function loops processing nested-loops

假设一个球落在屏幕上并且一旦它撞到边界就会重置:

float BallY = 50; // y value of the ball
float BallX = 260; // x value of the ball

void setup()
{
 size(512, 348); //width and height of screen
}

void draw()
{
  background(255);
  fill(0);
  ellipse(BallX, BallY, 15, 15); //ball that will fall 
  BallY++; //ball's y value increases each frame
  if (BallY > height) //if ball's y value is greater than the screen
{
  BallY = 0; //reset the y value of the ball back to 0
}
}

如何使我的“if语句”成为“for循环”,例如在屏幕左上方创建一个正方形,并在每次球到达屏幕末尾时在其旁边创建另一个正方形?

因为我的逻辑是这样的:

for(float rectangleX=0; (rectangleX+20) <= width; rectangleX+=40){

for(float Bally=0; Bally<height; Bally++){

    rect(rectangleX, 20, 20, 20);

但是我知道一旦程序运行就会创建一行矩形而不是一个接一个,因为球从屏幕上掉出来......我不确定如何把它放在一起。那么解决这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

你遗失的一件事是记住球击中墙壁的次数。

然后,通过从0到for的简单counter - 1循环,您可以绘制矩形。

你需要一个小公式来计算他们的左x坐标,但这不应该太难。

答案 1 :(得分:1)

如上所述,你需要一个柜台。这是一个可能的解决方案:

float BallY = 50; // y value of the ball
float BallX = 260; // x value of the ball
int counter;

void setup()
{
  size(512, 348); //width and height of screen
  counter = 0;
}

void draw()
{
  background(255);
  fill(0);
  ellipse(BallX, BallY, 15, 15); //ball that will fall 
  BallY++; //ball's y value increases each frame
  if (BallY > height) //if ball's y value is greater than the screen
  {
    BallY = 0; //reset the y value of the ball back to 0
    counter++;
  }

  for (int i = 0; i < counter; i++) {
    rect(i * 20, 0, 20, 20);
  }
}

希望这会有所帮助。和平。

编辑: 如果要更改rect的起始x和y位置,可以在for循环中执行:

rect(100 + i * 20, 100, 20, 20);