如何设置 if 语句使循环前进然后倒退?加工

How to set up if statements so that loop goes forward and then in reverse? Processing

int x = 31;
int y = 31;

int x_dir = 4;
int y_dir = 0;

void setup ()
{
 size (800, 800); 
}

void draw ()
{
 background (150);
ellipse (x,y,60, 60);


if (x+30>=width)
{
  x_dir =-4;
  y_dir = 4;
}
  if (y+30>=height)
  {
   x_dir=4;
   y_dir = 0;
  }

if (x+30>=width)
{
x_dir = -4;  
}

x+=x_dir;
y+=y_dir;
println(x,y);
}

嗨,

我必须在处理过程中创建这个程序,它会产生一个球以 Z 模式运动的动画(从左上角到右上角,对角线从右上角到左下角,然后从左下角到右下角)然后沿着它来的同一条路倒退。 虽然我已经为正向编写了代码,但我不知道我需要为程序编写什么 2 个 if 或 else 语句,以便根据一个条件它前进,并根据另一个条件它会倒退,它将继续这样做直到它终止。 如果我能够弄清楚我需要写哪两个 if 语句,我需要做的就是复制并反转正向循环中的 x_dir 和 y_dir 符号。

有很多不同的方法可以做到这一点。

一种方法是跟踪您所在的 "mode"。您可以使用 int 变量来做到这一点,当您处于第一部分时 0路径,1 当你在路径的第二部分时,等等。然后只需使用 if 语句来决定要做什么,如何移动球等。

这是一个例子:

int x = 31;
int y = 31;

int mode = 0;

void setup ()
{
  size (800, 800);
}

void draw ()
{
  background (150);
  ellipse (x, y, 60, 60);


  if (mode == 0) {
    x = x + 4; 

    if (x+30>=width) {
      mode = 1;
    }
  } else if (mode == 1) {
    x = x - 4;
    y = y + 4;

    if (y+30>=height) {
      mode = 2;
    }
  } else if (mode == 2) {
    x = x + 4;
    if (x+30>=width) {
      mode = 3;
    }
  } else if (mode == 3) {
    x = x - 4;
    y = y - 4;

    if (y-30 < 0) {
      mode = 2;
    }
  }
}

正如我所说,这只是解决问题的一种方法,您还可以做出一些明显的改进。例如,您可以将移动速度和改变模式的条件存储在数组中(或者更好的是,在对象中)并删除所有 if 语句。