未在“处理”

时间:2017-01-31 03:04:06

标签: processing mouse

我试图通过拖动鼠标(例如,左上象限中的圆圈)在一个地方绘制,并使图形出现在画布中心周围的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个位置绘制。

感谢您的帮助。

1 个答案:

答案 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的回答,以获得更好的解释。