Processing 未在“中的所需位置绘制”;处理「;

Processing 未在“中的所需位置绘制”;处理「;,processing,mouse,Processing,Mouse,我试图通过拖动鼠标(例如,左上象限中的一个圆)在一个位置绘制图形,并使图形显示在画布中心周围的四个位置(包括鼠标光标下的一个右位置)。我尝试了以下代码: intx=0; int y=0; 无效设置(){ 尺寸(400400); 背景(255); 平移(宽度/2,高度/2); } 作废提款(){ } void mouseDragged(){ 平移(宽度/2,高度/2); 对于(int i=0;i由于您正在转换画布(到width/2,height/2),因此没有任何点位于鼠标下方)在绘制点之前,但您

我试图通过拖动鼠标(例如,左上象限中的一个圆)在一个位置绘制图形,并使图形显示在画布中心周围的四个位置(包括鼠标光标下的一个右位置)。我尝试了以下代码:

intx=0;
int y=0;
无效设置(){
尺寸(400400);
背景(255);
平移(宽度/2,高度/2);
}
作废提款(){
}
void mouseDragged(){
平移(宽度/2,高度/2);

对于(int i=0;i由于您正在转换画布(到
width/2,height/2
),因此没有任何点位于鼠标下方)在绘制点之前,但您正在使用
mouseX,mouseY
绘制点。请将
mouseX,mouseY
视为距左上角的X和Y距离。如果您希望点位于鼠标下方,则必须使用距转换到的点的距离

换句话说,与此相反:

x = mouseX; 
y = mouseY;
你想要这个:

x = width/2 - mouseX; 
y = height/2 - mouseY;

至于正在绘制的额外点,这似乎是使用
mouseDragged()
函数的副作用。这里发生了一些奇怪的事情,但是您可以通过使用
draw()
函数和
mousedpressed
变量而不是
mouseDragged()
函数来解决这个问题


编辑:我更改了它们的顺序。请查看我对您的答案,以获得更好的解释。

“那里发生了一些奇怪的事情”:这是否意味着这是这个优秀软件中的一个缺陷?@mso老实说,我不知道。它看起来确实有点缺陷,但我没有花足够的时间来确定。我可能想比较使用不同渲染器的行为,或者尝试打印出渲染的额外点-它们似乎比常规po少ints,这可能是一个标志。