#java #processing
#java #обработка
Вопрос:
Я пытаюсь написать простую игру на Java, которая использует обработку для рендеринга графики. Однако у меня возникли проблемы с отображением любых изменений с помощью updatePixels (). Я могу успешно установить цвет фона и нарисовать базовые 2d-фигуры, но я ничего не получаю от редактирования переменной pixels [] или от использования 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();
}
}
Когда я инициализирую () этот класс, я получаю белый эллипс на черном экране, а не экран с красными пикселями (чего я и ожидал).
Массив pixels [] определенно присутствует, поскольку я распечатал его, и я не получаю ошибок.
Что я делаю не так?
Ответ №1:
Эта строка:
p = this.color(255, 0, 0);
изменяет только локальную переменную p
, которая содержала копию значения пикселя.
Что вы хотите, так это изменить значения внутри pixels
массива, как в:
for (int i = 0 ; i < pixels.length ; i ) {
pixels[i] = color(255, 0, 0);
}
Комментарии:
1. На самом деле написанный вами код эквивалентен функции Java for-each. Я думаю, что проблема заключается в чем-то более тонком, чем это. Я также пытался изменять отдельные пиксели по индексу, но безрезультатно.
2. @Fecal Brunch: нет, это не эквивалентно, p — это не ссылка на пиксель, это значение int. Попробуйте данный код.
3. @PhiLho Спасибо, что посмотрели. Я попробовал это, на всякий случай, и это не сработало. Я также пробовал такие вещи, как «пиксели [5] = цвет (255, 0, 0)», чтобы изменить отдельных пользователей. Я совершенно уверен, что это не имеет ничего общего с циклом. Что касается того, почему for-each эквивалентно, обратите внимание, что «pixels[]» на самом деле является массивом int, пиксели которого хранятся в виде шестнадцатеричных значений RGB. ie. «PApplet.color(255, 0, 0)» вернет «0xFF000000» (последние два нуля являются альфа-каналом). Просто для пояснения эквивалентности для каждого: leepoint.net/notes-java/flow/loops/foreach.html
4. Ах, я только что попробовал это снова, и теперь это работает. Потрясающе. Но почему для каждого не сработало?
5. Хм, хорошо, это было правильно, но когда я изменил его, ничего не произошло. Проблема, с которой я столкнулся, на самом деле была где-то в другом месте кода. Глупый я. Спасибо, ребята.