Как настроить операторы if, чтобы цикл шел вперед, а затем в обратном направлении? Обработка

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

Привет,

Я должен создать эту программу в processing, которая создает анимацию шара, движущегося по шаблону Z (сверху слева направо, по диагонали сверху справа налево, а затем прямо снизу слева направо), который затем возвращается назад по тому же пути, по которому он пришел. Хотя у меня есть код, написанный для прямого направления, я не знаю, какие 2 оператора if или else мне нужно написать для программы, чтобы на основе одного условия она продвигалась вперед, а на основе другого условия она возвращалась назад, и это будет продолжаться до тех пор, пока не завершится. Если я смогу определить, какие два оператора if мне нужно написать, все, что мне нужно сделать, это скопировать и поменять местами знаки x_dir и y_dir в прямом цикле.

Ответ №1:

Существует множество различных способов, которыми вы можете это сделать.

Один из подходов заключается в отслеживании того, в каком «режиме» вы находитесь. Вы могли бы сделать это, используя 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 операторов.