gpt4 book ai didi

java - 像MS Paint一样画直线

转载 作者:行者123 更新时间:2023-11-30 01:41:09 25 4
gpt4 key购买 nike

我正在尝试绘制直线(在处理 3.5.4 中),就像在 MS Paint 工具中完成的那样(通过单击鼠标左键选择一个点并拖动指针,然后释放它以获得直线)。我尝试过使用 mousePressed() 和 mouseReleased() 函数,它会创建直线,但当我拖动它而不释放时,它不会实时显示直线它,这是正常的,因为我在这种情况下没有使用 draw() 函数。

void mousePressed() {
x1 = mouseX;
y1 = mouseY;
}

void mouseReleased() {
line (x1, y1, mouseX, mouseY);
}

我还尝试在draw()函数中实现创建直线,以便我可以获得未释放直线的实时移动,但这也因绘制多条直线而失败。

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

我正在尝试实时实现这样的目标(同时拖动鼠标)。
I've marked the points for the understanding purpose

最佳答案

如果一条线未完成,则必须在 draw() 中从起点到当前鼠标位置( mouseXmouseY )绘制一条线。

使用 ArrayListPVector存储点的对象:

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);
}
}

关于java - 像MS Paint一样画直线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59941873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com