Относительно примеров глобальных и локальных переменных из «Обработки обучения» Дэниела Шиффмана - PullRequest
1 голос
/ 28 февраля 2020

В нативные примеры для обработки включены следующие два из "Обработки обучения" Даниэля Шиффмана:

Пример # 1


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

void draw() {
  int count = 0;
  count = count + 1;
  background(count);
}

Пример # 2


int count = 0;

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

void draw() {
  count = count + 1;
  background(count);
}

Вопрос, который я бы поставил для первого примера, вероятно, уже задан; мое лучшее предположение состоит в том, что локальная переменная не работает в этом случае, потому что draw() - это все oop, и поэтому даже если существует оператор count = count + 1 для перечисления int count, объявляющий int count = 0 в пределах draw() l oop означает, что значение постоянно сбрасывается на ноль. Это правильно?

Что касается второго примера, вопрос не обязательно о переменной, а о том, как работает программа: после первого l oop, который переходит от черного к белый, почему программа продолжает циклически переходить от черного к синему? Как этого можно избежать или исправить в других приложениях?

1 Ответ

1 голос
/ 28 февраля 2020

В первом примере переменная объявлена ​​в области действия drew. Каждый раз, когда вызывается draw, переменная count создается и инициализируется значением 0.

Во втором примере используется глобальная переменная count. Переменная инициализируется один раз при запуске приложения и непрерывно увеличивается.

Если аргумент [background()] может быть целым значением в диапазоне [0, 255]. В этом случае аргумент интерпретируется как оттенки серого, где 0 черный, а 255 белый.
Если целое значение больше 255, оно интерпретируется как значение RGB и состоит из 3 8-битных компонентов цвета (0xRRGGBB). 0xff0000 - это красный, 0x00ff00 - это зеленый, а 0x0000ff - это синий.

Чтобы пустое значение цвета стало синим, необходимо убедиться, что значение меньше 255. Например:

void draw() {
    count = count + 1;
    if (count > 255) {
        count = 0;
    }
    background(count);
}
...