我试图通过拖动鼠标(例如,左上象限中的圆圈)在一个地方绘制,并使图形出现在画布中心周围的4个位置(包括鼠标光标下方的一个)。我试过以下代码:
int x=0;
int y=0;
void setup(){
size(400, 400);
background(255);
translate(width/2, height/2);
}
void draw() {
}
void mouseDragged(){
translate(width/2, height/2);
for(int i=0; i<4; i++){
rotate(PI/2);
x= mouseX ; y=mouseY;
line(x, y, mouseX, mouseY);
}
}
但是,图形不会在鼠标光标下绘制。如果我非常接近左上角,则会在画布中心绘制线条。
其次,在我尝试的时候总共抽出5个数字而不是4个数字。如果我画在左上角附近,不需要的图形会出现在画布的右下角。这个不受欢迎的数字比其他数字更微弱。
哪些错误以及如何纠正这两个问题?我想用旋转命令(围绕画布中心旋转)实现这一点,虽然我看到我也可以使用translate命令在画布上的4个位置绘制。
感谢您的帮助。
答案 0 :(得分:1)
您的所有点都不在鼠标之下,因为您在绘制点之前将画布翻译为width/2, height/2
,但是您正在使用mouseX, mouseY
来绘制它们。将mouseX, mouseY
视为左上角的X和Y距离。如果你想要一个点在鼠标下面,你必须使用你翻译的点的距离!
换句话说,而不是:
x = mouseX;
y = mouseY;
你想要这个:
x = width/2 - mouseX;
y = height/2 - mouseY;
至于绘制的额外点,这似乎是使用mouseDragged()
函数的副作用。有一些奇怪的事情发生在那里,但你可以通过使用draw()
函数和mousePressed
变量而不是mouseDragged()
函数来解决这个问题。
编辑:我改变了他们应该进入的顺序。请查看我对next question的回答,以获得更好的解释。