像MS paint一样画直线
Drawing straight lines like MS paint
我正在尝试绘制直线(在处理 3.5.4 中),就像在 MS 画图工具中所做的那样(select 通过单击鼠标左键并在释放指针之前拖动指针来获得一个点直线)。我试过使用 mousePressed()
和 mouseReleased()
函数,它创建了直线,但是当我拖动它而不释放它时,它不会在 real-time 中显示直线,这是正常的,因为我'在这种情况下我没有使用 draw()
函数。
void mousePressed() {
x1 = mouseX;
y1 = mouseY;
}
void mouseReleased() {
line (x1, y1, mouseX, mouseY);
}
我也尝试在 draw()
函数中实现创建线,这样我就可以得到未释放直线的 real-time 移动,但是这也因为绘制多条直线而失败。
void draw () {
if(mousePressed) {
line (x1, y1, mouseX, mouseY);
}
}
I've marked (x1
, y1
) and (mouseX
, mouseY
) points as mouse's pressing and releasing points
我正在尝试在 real-time 上实现类似的效果(同时拖动鼠标)。
I've marked the points for the understanding purpose
如果一条线没有画完,那么你要在draw()
.
中从起点到当前鼠标位置(mouseX
, mouseY
)画一条线
使用一个ArrayList
of PVector
对象来存储点:
ArrayList<PVector> points = new ArrayList<PVector>();
每点击一次鼠标按钮,就在列表中添加一个点:
void mousePressed() {
points.add(new PVector(mouseX, mouseY));
}
在循环中的点之间画线。如果列表中的点数为奇数,则从最后一个点到当前鼠标位置画一条线:
for (int i = 0; i < points.size(); i += 2) {
PVector p1 = points.get(i);
boolean even = i+1 < points.size();
PVector p2 = even ? points.get(i+1) : new PVector(mouseX, mouseY);
line(p1.x, p1.y, p2.x, p2.y);
}
看例子:
ArrayList<PVector> points = new ArrayList<PVector>();
void setup() {
size(500 , 500);
}
void mousePressed() {
points.add(new PVector(mouseX, mouseY));
}
void draw() {
background(0);
stroke(255);
for (int i = 0; i < points.size(); i += 2) {
PVector p1 = points.get(i);
boolean even = i+1 < points.size();
PVector p2 = even ? points.get(i+1) : new PVector(mouseX, mouseY);
line(p1.x, p1.y, p2.x, p2.y);
}
}
如果你想在点击鼠标时开始画线,松开鼠标时结束画线,那么你必须在mouseReleased
上添加第二个点:
ArrayList<PVector> points = new ArrayList<PVector>();
void setup() {
size(500 , 500);
}
void mousePressed() {
points.add(new PVector(mouseX, mouseY));
}
void mouseReleased() {
points.add(new PVector(mouseX, mouseY));
}
void draw() {
background(0);
stroke(255);
for (int i = 0; i < points.size(); i += 2) {
PVector p1 = points.get(i);
boolean even = i+1 < points.size();
PVector p2 = even ? points.get(i+1) : new PVector(mouseX, mouseY);
line(p1.x, p1.y, p2.x, p2.y);
}
}
我正在尝试绘制直线(在处理 3.5.4 中),就像在 MS 画图工具中所做的那样(select 通过单击鼠标左键并在释放指针之前拖动指针来获得一个点直线)。我试过使用 mousePressed()
和 mouseReleased()
函数,它创建了直线,但是当我拖动它而不释放它时,它不会在 real-time 中显示直线,这是正常的,因为我'在这种情况下我没有使用 draw()
函数。
void mousePressed() {
x1 = mouseX;
y1 = mouseY;
}
void mouseReleased() {
line (x1, y1, mouseX, mouseY);
}
我也尝试在 draw()
函数中实现创建线,这样我就可以得到未释放直线的 real-time 移动,但是这也因为绘制多条直线而失败。
void draw () {
if(mousePressed) {
line (x1, y1, mouseX, mouseY);
}
}
I've marked (x1
, y1
) and (mouseX
, mouseY
) points as mouse's pressing and releasing points
我正在尝试在 real-time 上实现类似的效果(同时拖动鼠标)。
I've marked the points for the understanding purpose
如果一条线没有画完,那么你要在draw()
.
mouseX
, mouseY
)画一条线
使用一个ArrayList
of PVector
对象来存储点:
ArrayList<PVector> points = new ArrayList<PVector>();
每点击一次鼠标按钮,就在列表中添加一个点:
void mousePressed() {
points.add(new PVector(mouseX, mouseY));
}
在循环中的点之间画线。如果列表中的点数为奇数,则从最后一个点到当前鼠标位置画一条线:
for (int i = 0; i < points.size(); i += 2) {
PVector p1 = points.get(i);
boolean even = i+1 < points.size();
PVector p2 = even ? points.get(i+1) : new PVector(mouseX, mouseY);
line(p1.x, p1.y, p2.x, p2.y);
}
看例子:
ArrayList<PVector> points = new ArrayList<PVector>();
void setup() {
size(500 , 500);
}
void mousePressed() {
points.add(new PVector(mouseX, mouseY));
}
void draw() {
background(0);
stroke(255);
for (int i = 0; i < points.size(); i += 2) {
PVector p1 = points.get(i);
boolean even = i+1 < points.size();
PVector p2 = even ? points.get(i+1) : new PVector(mouseX, mouseY);
line(p1.x, p1.y, p2.x, p2.y);
}
}
如果你想在点击鼠标时开始画线,松开鼠标时结束画线,那么你必须在mouseReleased
上添加第二个点:
ArrayList<PVector> points = new ArrayList<PVector>();
void setup() {
size(500 , 500);
}
void mousePressed() {
points.add(new PVector(mouseX, mouseY));
}
void mouseReleased() {
points.add(new PVector(mouseX, mouseY));
}
void draw() {
background(0);
stroke(255);
for (int i = 0; i < points.size(); i += 2) {
PVector p1 = points.get(i);
boolean even = i+1 < points.size();
PVector p2 = even ? points.get(i+1) : new PVector(mouseX, mouseY);
line(p1.x, p1.y, p2.x, p2.y);
}
}