创建第二个对象使得类的功能不再起作用

时间:2017-05-01 17:58:28

标签: java class processing

我试图写一个显示向量的类。如果我创建一个矢量对象,一切都按预期工作。在我的示例代码中,对象lin1draw()函数的帮助下绘制。

如果我现在创建第二个矢量对象,则(未更改的)绘制函数不再执行任何操作,即使对象本身未更改。反之亦然:第二个对象是唯一存在的对象,然后可以绘制,但只有lin1不存在。

有谁知道我的错误在哪里?

vector lin;
vector lin2;

void setup()
{
  size(500,500);
  background(255);
  cenX = width/2;
  cenY = height/2;
  noLoop();
}

void draw()
{
  coordSys();
  lin = new vector(0,0,100,100);
  lin2 = new vector(0,0,-200,-200);
  lin.draw();
  lin2.draw();
  lin.getAll();
}

class vector
{
  float x1,y1,x2,y2;
  float length;
  float angle;
  float gegenK, anK;

  vector(float nx1, float ny1, float nx2, float ny2)
  {
    translate(cenX,cenY);
    x1 = nx1; y1 = -ny1; x2 = nx2; y2 = -ny2; 
    strokeWeight(2);
    // Gegenkathete
    gegenK = ny2 - ny1;
    // Ankathete
    anK = x2 - x1;
    // length and angle
    length = sqrt(sq(anK) + sq(gegenK));
    angle = winkel(gegenK, anK);
  }

  void draw()
  {
    stroke(0);
    line(x1,y1,x2,y2);
  }
}
}

1 个答案:

答案 0 :(得分:0)

编写代码时请使用标准命名约定。具体来说,您的班级应为Vector,大写为V.此外,请以编译并运行的MCVE形式发布您的代码。

无论如何,Vector()构造函数中的第一个调用就是:

translate(cenX,cenY);

这会将窗口的原点移动到窗口的中间位置。当您执行此操作一次时,这只会使您的绘图调用相对于窗口的中心。但是当你这样做两次时,它会将原点移动到窗口的右下角,因此所有的绘图都会移出屏幕边缘。

要解决您的问题,您需要移动此行,使其仅发生一次(可能在draw()函数的开头)而不是每次绘制Vector。另一种方法是使用pushMatrix()popMatrix()函数来避免这种窗口翻译的堆叠。