我是Processing的新手,我正在尝试使用Tweaking工具。我的问题是我似乎无法调整setup()
方法中创建的变量的值。
下面是一个例子:
Ellipse e;
void setup(){
size(640, 480);
e = new Ellipse();
}
void draw(){
background(220);
e.draw();
}
class Ellipse {
float w, l;
Ellipse(){
this.w = 300.0;
this.l = 300.0;
}
void draw(){
ellipse(300, 300 , w, l);
}
}
当我使用" Tweak"时,我可以调整300
类中Ellipse
的所有四个实例。它与第3和第4个完全一样,但是当我调整w
或l
的值时,没有任何反应。
我认为这是因为Ellipse
对象是从setup()
创建的,而不是draw()
。这是正确的诊断,有没有解决问题的方法? (我不想在draw()
)的每次通话中创建一个全新的对象。
答案 0 :(得分:1)
您所看到的唯一变化是当您更改尚未发生的数字时。
您的Ellipse
已经构建,因此更改构造函数中300
的值不会做任何事情。请注意,如果您要创建Ellipse
的新实例,则该新实例确实会获取更改。
您可以调整前两个300
值,因为它们"发生"每一帧。
如果您希望能够调整w
和l
变量,则需要将它们放在每帧发生的位置。你可以这样做:
void draw(){
w = 300;
l = 300;
ellipse(300, 300 , w, l);
}
或者你可以缩短它:
void draw(){
ellipse(300, 300 , 300, 300);
}
变更范围
没有详细介绍调整模式的运作方式 在内部,你应该记住,改变一个数字将有 只有在将来执行调整后的代码时才会生效。对于 例如,请使用以下代码:
void setup() { size(200, 200); background(20); } void draw() { fill(100, 0, 0); ellipse(100, 100, 50, 50); }
在此代码中,更改' size(...)'的值和'背景(...)' 在草图运行时,函数将无效 这些代码行在安装时发生一次,永远不会被执行 在素描生活中再次出现。相反,改变了价值观 fill()和ellipse()会有效,因为' draw'被执行 再一次。
同样的原则适用于全局变量,例如:
int CIRCLE_SIZE = 50; void setup() { size(200, 200); background(20); } void draw() { int red = 100; fill(red, 0, 0); ellipse(100, 100, CIRCLE_SIZE, CIRCLE_SIZE); }
在这种情况下,更改分配给CIRCLE_SIZE(50)的值将 没有效果,因为值的分配' 50'到了 变量CIRCLE_SIZE在草图生命期间只发生过一次,所以 即使指定的值,CIRCLE_SIZE的值也将保持不变 改变了。相反,改变了指定的值 变量' red' (100)因此会产生预期的效果 每次抽奖都会进行分配。
全局变量问题的简单解决方案是 重新分配您希望在绘图功能中调整的值。例如, 以下绘制函数将消除我们遇到的问题 前一代码中椭圆的大小。
void draw() { CIRCLE_SIZE = 50; int red = 100; fill(red, 0, 0); ellipse(100, 100, CIRCLE_SIZE, CIRCLE_SIZE); }
添加行' CIRCLE_SIZE = 50;'到绘制函数的顶部 这样就可以调整这个数字并控制它的大小 实时圈。