#arrays #drawing #line #processing
#массивы #рисование #строка #обработка
Вопрос:
Я хотел бы сохранить след мыши (или другие визуальные данные), не выводя его на экран.
Как я могу сделать следующее, но сохранить отображаемые данные в Arary, чтобы они не отображались на сцене?
line(mouseX, mouseY, pmouseX, pmouseY);
У меня есть подозрение, что мне нужно переключаться между различными отображаемыми данными при каждом рисовании () с помощью:
- очистка экрана
- загрузка данных целевого отображения
- рисование на экране
- сохранить обратно в целевые данные
Я еще не уверен, как это сделать, или есть ли лучший подход.
Ответ №1:
пример @Majlik действительно классный (проголосовал). Просто добавлю, что вам не нужна PGraphic, если вы хотите только сохранить данные. И вы можете использовать PVector для хранения данных в mouseMoved().
вот моя попытка 😉
ArrayList <PVector> points = new ArrayList <PVector>();
boolean print = false;
void setup(){
size(400,400);
background(255);
}
void draw(){
if(print amp;amp; points.size()>1){
for(int i = 0; i < points.size()-1; i ){
float stX = points.get(i).x;
float stY = points.get(i).y;
float ndX = points.get(i 1).x;
float ndY = points.get(i 1).y;
line(stX, stY, ndX, ndY);
}
print = false;
}
}
void mouseMoved(){
points.add(new PVector (mouseX, mouseY));
}
void keyPressed(){
if(key == ' ' ){
background(255);
print = true;
}
}
Комментарии:
1. Использование
PVector
— более чистое решение 🙂
Ответ №2:
Используя PGraphics для рисования линий на другом дисплее (вы можете включить / выключить его нажатием любой клавиши) и Arraylist
для сохранения положения мыши, вы можете добиться чего-то подобного:
PGraphics pg;
ArrayList<Integer> points = new ArrayList();
boolean visible = true;
void setup() {
size(400, 400);
pg = createGraphics(width, height);
}
void draw() {
background(100);
if(points.size() >= 100){
points.remove(0);
points.remove(1);
}
points.add(mouseX);
points.add(mouseY);
pg.beginDraw();
pg.background(100);
for(int i = 2; i < points.size()-4; i = 2){
pg.stroke(255/100*(i 1));
pg.line(points.get(i), points.get(i 1), points.get(i 2), points.get(i 3));
}
pg.endDraw();
if(visible)
image(pg, 0, 0);
}
void keyPressed() {
visible = !visible;
}
Комментарии:
1. Я еще не читал о PGraphic, спасибо! Возможность рисовать непосредственно на объекте — это именно то, что мне было нужно.