Большая часть вашего кода имеет смысл, есть только две ошибки, которые я могу заметить, которые могут помешать вам прокручивать все ваши точки и визуализировать их:
- ваше условие будет выходить за пределы индекса массива: try
for (int i = 0; i < dataPoints.size(); i++)
- не забудьте очистить рамку, в противном случае вы будете рисовать поверх одних и тех же точек снова и снова
Помните, что индексы массива начинаются с 0 в Processing / Java (и последний индекс будет не size()
вашего массива, а на 1 меньше, следовательно, <
в условии for)
Вот ваш код с вышеуказанными настройками:
ArrayList<dataPoint> dataPoints = new ArrayList<dataPoint>();
void setup(){
size(1000, 1000);
}
void draw(){
background(255);
for (int i = 0; i < dataPoints.size(); i++) {
// An ArrayList doesn't know what it is storing so we have to cast the object coming out
dataPoint Point = dataPoints.get(i);
Point.display();
}
}
void mousePressed() {
dataPoints.add(new dataPoint(mouseX, mouseY));
}
class dataPoint {
float x;
float y;
dataPoint(int tempX, int tempY) {
x = tempX;
y = tempY;
}
void display() {
strokeWeight(10);
stroke(255,0,0);
point(x,y);
}
}
Обратите внимание , что у Processing есть удобный класс PVector (со свойствами x, y), так что вы можете сделать что-то вроде этого:
ArrayList<PVector> dataPoints = new ArrayList<PVector>();
void setup(){
size(1000, 1000);
strokeWeight(10);
stroke(255,0,0);
noFill();
}
void draw(){
background(255);
beginShape();
for (int i = 0; i < dataPoints.size(); i++) {
PVector point = dataPoints.get(i);
vertex(point.x,point.y);
}
endShape();
}
void mousePressed() {
dataPoints.add(new PVector(mouseX, mouseY));
}
Это немного мелочи, но я рекомендую следовать Java Naming Convention , чтобы сохранить код согласованным. (Например: переименование класса dataPoint
в DataPoint
и переименование экземпляра Point
в point
)