【问题标题】:Is there a way to change the color of PShape without entering begin/end?有没有办法在不输入开始/结束的情况下更改 PShape 的颜色?
【发布时间】:2013-09-19 20:14:03
【问题描述】:

我一直在编写一个程序,它可以用不同的颜色重绘许多(几百个)相同的 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);
}

非常感谢任何帮助

【问题讨论】:

  • 不,beginend 进入和离开上下文,如果您不在上下文中,则无法更改其中的任何内容。

标签: processing


【解决方案1】:

是的,您可以使用 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()

【讨论】:

  • 非常感谢! (是的,它是一个占位符)
猜你喜欢
  • 1970-01-01
  • 2018-04-13
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多