Java 创建第二个对象使类的函数不再工作
我想写一个显示向量的类。如果我创建一个向量对象,一切都会按预期进行。在我的示例代码中,对象Java 创建第二个对象使类的函数不再工作,java,class,processing,Java,Class,Processing,我想写一个显示向量的类。如果我创建一个向量对象,一切都会按预期进行。在我的示例代码中,对象lin1是在draw()函数的帮助下绘制的 如果我现在创建第二个矢量对象,(未更改)draw函数不再执行任何操作,即使对象本身未更改。反过来也是一样的:如果第二个对象是唯一存在的对象,那么可以绘制它,但前提是lin1不存在 有人知道我的错误在哪里吗 vector lin; vector lin2; void setup() { size(500,500); background(255); c
lin1
是在draw()
函数的帮助下绘制的
如果我现在创建第二个矢量对象,(未更改)draw函数不再执行任何操作,即使对象本身未更改。反过来也是一样的:如果第二个对象是唯一存在的对象,那么可以绘制它,但前提是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);
}
}
}
编写代码时请使用标准命名约定。具体来说,你的类应该是
Vector
,大写V。另外,请以编译和运行的形式发布你的代码
无论如何,Vector()
构造函数中的第一个调用是:
translate(cenX,cenY);
这会将窗的原点移动到窗的一半。执行此操作一次后,只需相对于窗口中心进行图形调用。但是,当您执行两次此操作时,它会将原点移动到窗口的右下角,因此所有图形都会移出屏幕边缘
要解决问题,您需要移动这条线,使其只发生一次(可能在
draw()
函数的开头),而不是每次绘制向量时。另一种方法是使用pushMatrix()
和popMatrix()
函数来避免窗口翻译的堆叠。编写代码时请使用标准命名约定。具体来说,你的类应该是Vector
,大写V。另外,请以编译和运行的形式发布你的代码
无论如何,Vector()
构造函数中的第一个调用是:
translate(cenX,cenY);
这会将窗的原点移动到窗的一半。执行此操作一次后,只需相对于窗口中心进行图形调用。但是,当您执行两次此操作时,它会将原点移动到窗口的右下角,因此所有图形都会移出屏幕边缘
要解决问题,您需要移动这条线,使其只发生一次(可能在draw()
函数的开头),而不是每次绘制向量时。另一种方法是使用pushMatrix()
和popMatrix()
函数来避免窗口翻译的堆叠。是否有不调用lin2.getAll()
的原因?能否将源代码显示到stroke()
和line()
?stroke(0)
做什么?这些是处理内部函数。直线画一条直线,笔划设置直线的颜色。@Ishnark:哦,对不起,getall函数只是打印出向量起点和终点的坐标。在draw()函数中,是否需要将其更改为引用调用的“line”,如:this.line(x1,y1,x2,y2)?否则,它似乎只处理1 line()函数。你为什么不调用lin2.getAll()
?你能把源代码显示给stroke()
和line()
?stroke(0)
做什么?这些是处理内部函数。直线画一条直线,笔划设置直线的颜色。@Ishnark:哦,对不起,getall函数只是打印出向量起点和终点的坐标。在draw()函数中,是否需要将其更改为引用调用的“line”,如:this.line(x1,y1,x2,y2)?否则,它似乎只处理1 line()函数。嗯,吉姆,就是这样!谢谢!就这样!谢谢!