调整在Processing中的setup()中创建的对象

时间:2016-02-02 16:12:58

标签: java processing

我是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个完全一样,但是当我调整wl的值时,没有任何反应。

我认为这是因为Ellipse对象是从setup()创建的,而不是draw()。这是正确的诊断,有没有解决问题的方法? (我不想在draw())的每次通话中创建一个全新的对象。

1 个答案:

答案 0 :(得分:1)

您所看到的唯一变化是当您更改尚未发生的数字

您的Ellipse已经构建,因此更改构造函数中300的值不会做任何事情。请注意,如果您要创建Ellipse实例,则该新实例确实会获取更改。

您可以调整前两个300值,因为它们"发生"每一帧。

如果您希望能够调整wl变量,则需要将它们放在每帧发生的位置。你可以这样做:

  void draw(){
    w = 300;
    l = 300;
    ellipse(300, 300 , w, l);
  }

或者你可以缩短它:

  void draw(){
    ellipse(300, 300 , 300, 300);
  }

来自TweakMode homepage

  

变更范围

     

没有详细介绍调整模式的运作方式   在内部,你应该记住,改变一个数字将有   只有在将来执行调整后的代码时才会生效。对于   例如,请使用以下代码:

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;'到绘制函数的顶部   这样就可以调整这个数字并控制它的大小   实时圈。