2

我一直在编写一个程序,它以不同的颜色重绘许多(数百个)相同的 PShape。但是,我还没有找到一种在不实际重新创建 PShape 的情况下以不同颜色重新绘制 PShape 的方法,即通过开始/结束形状重做所有顶点并简单地更改填充,然后将其分配给新的 PShape 变量。我尝试过 tint()、fill()、setFill() 之类的方法,它们似乎都需要以开始/结束形状调用。

有没有办法在不完全重新定义形状并将其分配给新变量的情况下以不同的颜色重绘 PShape?

非常感谢任何帮助。

(这是我尝试过的不同事物的一种整理)

   PShape p;

    void setup()
{
  size(600,600,P2D);
  p = createShape();
  p.beginShape();
  p.vertex(0, 0);
  p.vertex(20, 0);
  p.vertex(20, 20);
  p.vertex(0, 20);
  p.endShape(CLOSE);
}

void draw()
{
  p.tint(200,100,30);
  p.fill(200,100,30);
  p.setFill(0,0);
  shape(p,100,100);
}

非常感谢任何帮助

4

1 回答 1

8

是的,您可以使用 PShape 的disableStyle()来禁用它的渲染样式并使用 Processing 的(您的草图):

PShape p;

void setup()
{
  size(600, 600, P2D);
  p = createShape();
  p.beginShape();
  p.vertex(0, 0);
  p.vertex(20, 0);
  p.vertex(20, 20);
  p.vertex(0, 20);
  p.endShape(CLOSE);
  //disable the PShape's default styles and use Processing's 
  p.disableStyle();
}

void draw()
{
  background(255);
  for(int i = 0 ; i < 30 ; i++){
      fill(i/30.0*255, 100, 30);
      shape(p, i * 20,300);
  }
}

对于这样一个简单的形状,您当然可以使用rect(),但我认为这是更复杂的东西的占位符。其他要探索的东西是beginShape()和createGraphics( )

于 2013-09-19T21:39:35.733 回答