Как заставить подключенный массив кругов (например, червя) перемещаться по холсту по прямой линии? - PullRequest
0 голосов
/ 11 ноября 2018
void setup(){
  size(800,800);
  background(0);
}

void draw() {
  int[]x= {20,40,60,80,100,120};
  fill (255,0,00);
  for (int i = 0; i <x.length; i ++){
    ellipse (i*6, 100,10,10);
  }
}

Я пытаюсь заставить «червяка» двигаться горизонтально по прямой через холст. Прилагается «червь». Я не знаю, с чего начать движение, потому что мне нужно переместить весь массив сразу. Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Перемещение массива значений мало чем отличается от перемещения одного значения.

Давайте посмотрим, как мы переместим одно значение:

float x = 0;

void draw(){
  background(0);
  ellipse(x, height/2, 20, 20);

  x++;
}

Чтобы переместить массив значений, вы должны сделать то же самое, но для каждого индекса массива. Как то так:

float[] xArray = {20, 40, 60};

void draw(){
  background(0);

  for(int i = 0; i < xArray.length; i++){
    ellipse(xArray[i], height/2, 20, 20);
    xArray[i]++;
  }
}

Бесстыдная самореклама: здесь - учебник по анимации в обработке, а здесь - учебник по массивам в обработке.

0 голосов
/ 11 ноября 2018

Сохраняет текущие позиции червя в глобальном массиве, где голова является первой позицией.

int[] x= {30,24,18,12,6,0};
int step = 6;

Изменение положения в каждом кадре на расстояние между двумя частями червя. Сдвиг текущей позиции в массиве в цикле:

draw() {

    .....
    for (int i = x.length-1; i > 0; --i ){
        x[i] = x[i-1];
    }
    x[0] += step;
    .....
}

Измените направление, если достигнут конец окна или начало окна, головкой червя:

if ( x[0] >= width || x[0] < 0)
        step *= -1;

Нарисуйте червя в обратном порядке:

for (int i = x.length-1; i >= 0; --i ){
    ellipse(x[i], 100, 10, 10);
}

Полный код может выглядеть следующим образом:

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

int[] x= {30,24,18,12,6,0};
int step = 6;

void draw() {

    background(0);

    fill (255,0,00);
    for (int i = x.length-1; i >= 0; --i ){
        ellipse(x[i], 100, 10, 10);
    }

    for (int i = x.length-1; i > 0; --i ){
        x[i] = x[i-1];
    }
    x[0] += step;
    if ( x[0] >= width || x[0] < 0)
        step *= -1;
}

Смотрите превью:

...