请有人可以解释为什么我的代码无法正常工作

时间:2019-01-06 14:35:16

标签: processing

我想创建一个程序,当我按下鼠标时可以进行绘制,但是当我按下鼠标按钮时,它会绘制顶点,但不连接它们。

void setup(){

    size( 500 , 500 );

    background (0);

    stroke(255);
}

void draw(){

    if ( mousePressed){

        beginShape(LINES);

        vertex(mouseX,mouseY);

        delay(10);

        vertex(mouseX,mouseY);

        endShape();
  }
}

我试图使用延迟函数来分离顶点,以便它们绘制线条,但是仍然无法正常工作,有人可以纠正代码或告诉我怎么做吗?

2 个答案:

答案 0 :(得分:0)

就像deets所说的那样,您实际上并不是在创建线,而是在每次绘制更新​​时添加一个点。要连接这些点,必须在旧鼠标位置和新鼠标位置之间画一条线。

float oldX;
float oldY;
//These make sure that oldX and oldY always stay the same at the end of the draw loop and dont get reset so the program knows where the old line was
void setup(){
    size(500,500);
    background (0);
    stroke(255);
}
void draw(){
  if(mousePressed){ 
    beginShape(LINES);
    vertex(mouseX, mouseY); //First Vertex
    vertex(oldX, oldY); //Second Vertex
    endShape();
  }
  oldX=mouseX;
  oldY=mouseY;
}

基本上,这一次通过绘制旧鼠标位置(oldX / oldY)并用新的线位置(newX / newY)来绘制线。由于处理的限制,您遇到的问题刚刚发生。如果您仍然需要帮助,请查看this处理程序。

答案 1 :(得分:-1)

首先,请不要从delay()函数内部调用draw()函数。那没有按照你的想法去做。 mouseXmouseY变量在该延迟期间不会改变,因此您只是在延长每帧的绘制时间。

最重要的是,您将从一个点绘制一条“线”,再到同一点。尝试debugging your code来了解我的意思。

您可以跟踪ArrayList实例中PVector个实例中单击的每个点。有关更多信息,请参见herehere

或者您可以使用pmouseXpmouseY变量。可以在the Processing reference中找到更多信息。