Возникли проблемы с updatePixels() в приложении Java с использованием библиотек обработки

Я пытаюсь написать простую игру на Java, которая использует Processing для рендеринга графики. Однако у меня возникают проблемы с визуализацией любых изменений с помощью updatePixels(). Я могу успешно установить цвет фона и нарисовать основные 2D-фигуры, но я ничего не получаю от редактирования переменной пикселей [] или от использования set (x, y, color).

Это мой (сокращенный) код:

import processing.core.*;

public class GameController extends PApplet {
  private int width, height;

  private final static String RENDER_MODE = PConstants.P2D; //JAVA2D;

  public GameController(int width, int height) {
    this.width = width;
    this.height = height - this.getBounds().y;
  }

  @Override
  public void setup() {
    this.size(this.width, this.height, RENDER_MODE);
    this.background(0);
  }

  @Override
  public void draw() {
    this.ellipse(50, 50, 100, 10);

    this.loadPixels();
    for (int p : this.pixels) {
      p = this.color(255, 0, 0);
    }
    this.updatePixels();
  }
}

Когда я init() этого класса, я получаю белый эллипс на черном экране, а не экран с красными пикселями (чего я и ожидал). Массив пикселей [] определенно существует, так как я его распечатал, и у меня нет ошибок. Что я делаю неправильно?


person Rhys van der Waerden    schedule 02.06.2011    source источник


Ответы (1)


Эта строка:

p = this.color(255, 0, 0);

изменяет только локальную переменную p, которая содержит копию значения пикселя.

Что вы хотите, так это изменить значения внутри массива pixels, как в:

for (int i = 0 ; i < pixels.length ; i++) {
    pixels[i] = color(255, 0, 0);
}
person Jerome    schedule 02.06.2011
comment
На самом деле код, который вы написали, эквивалентен функции Java for-each. Я думаю, что проблема в чем-то более тонком, чем это. Я также пытался изменить отдельные пиксели по индексу безрезультатно. - person Rhys van der Waerden; 02.06.2011
comment
@Fecal Brunch: нет, это не эквивалентно, p - это не ссылка на пиксель, это целое число. Попробуйте указанный код. - person PhiLho; 02.06.2011
comment
@PhiLho Спасибо, что посмотрели. На всякий случай попробовал, не помогло. Я также пробовал такие вещи, как пиксели [5] = цвет (255, 0, 0), чтобы изменить людей. Я совершенно уверен, что это не имеет ничего общего с петлей. Что касается того, почему for-each эквивалентен, обратите внимание, что пиксели [] на самом деле являются массивом int, пиксели которого хранятся в виде шестнадцатеричных значений RGB. т.е. PApplet.color(255, 0, 0) вернет 0xFF000000 (последние два нуля являются альфа-каналом). Просто для уточнения эквивалентности для каждого: leepoint.net/notes-java /flow/loops/foreach.html - person Rhys van der Waerden; 03.06.2011
comment
О, я только что попробовал еще раз, и теперь это работает. Потрясающий. Но почему не для каждой работы? - person Rhys van der Waerden; 03.06.2011
comment
Хм, хорошо, это было правильно, но когда я изменил его, ничего не произошло. Проблема, с которой я столкнулся, была на самом деле где-то еще в коде. Дурак я. Спасибо, парни. - person Rhys van der Waerden; 03.06.2011