我希望存储鼠标轨迹(或其他可视数据),而不会将其绘制到屏幕上。
如何执行以下操作,但将显示数据保存到Arrary中,以免它被吸引到舞台上?
line(mouseX, mouseY, pmouseX, pmouseY);
我怀疑我需要在每个draw()之间切换不同的显示数据:
我不知道该怎么做,或者是否有更好的方法。
答案 0 :(得分:3)
@Majlik的例子很酷(投票)。只是要补充一点,如果您只想存储数据,则不需要PGraphic。您可以使用PVector将数据存储在mouseMoved()中。
这是我的尝试;)
ArrayList <PVector> points = new ArrayList <PVector>();
boolean print = false;
void setup(){
size(400,400);
background(255);
}
void draw(){
if(print && 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 :(得分: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;
}