颜色在处理中改变背景,影响粒子

时间:2016-09-20 20:49:03

标签: background processing alpha

我试图将背景淡入淡出不同的颜色。我决定尝试画一个矩形而不是使用背景,但我在我的粒子上得到了踪迹,因为背景并没有被画出来。关于如何解决这个问题的建议?

 
// main tab
ArrayList<ParticleSystem> systems;

PVector windRight = new PVector(0.1,0);
PVector sortaSpeed = new PVector(-0.1,0);
PVector gravity = new PVector(0,0.05);

boolean wR = false;
boolean sP = false;
boolean cS = false;

int limit = 8;

int alpha = 10;
color[] colorArray  = {color(0,0,0,alpha),color(16, 37, 43,alpha),color(51, 10, 10,alpha),color(126, 255, 0,alpha)};
int currentColor;
int nextColor;

boolean change = false;

void setup() {
    size(640,480);
    systems = new ArrayList<ParticleSystem>();
  smooth();
  noStroke();
  currentColor = 0;
  for(int i = 0; i < limit; i++){
    systems.add(new ParticleSystem(random(100,200),10,new PVector(random(100,500),-5))); //random(480)
  }
  background(0);
}

void draw() {
  //rect(0, 0, 2000, 2000);
  fill(colorArray[currentColor]);
  rect(0, 0, width*2, height*2);
  //background(colorArray[currentColor]);
    if(change){
        currentColor = nextColor;
        change = false;

    }

  if(!systems.isEmpty()){
      for (int i =0; i < systems.size(); i++){
        ParticleSystem ps = systems.get(i);
        ps.applyForce(gravity);
        ps.run();
        if(wR){
          ps.applyForce(windRight);
        }
        if(sP){
          ps.applyForce(sortaSpeed);
        }
      }
  } 
}

void keyPressed() {

  if(key == 'w'){
    wR = true;
    print("w");
  } 
  if(key == 'a'){
    print('a');
    sP = true; 
  }
}

void keyReleased(){
  if(key == 'w'){
    wR = false;
  } else if(key == 'a'){
    sP = false;
  } else if(key == 's'){
    if(key == 's'){
        change = true;
        println("currentColor: "+currentColor);
        int newColor = currentColor;
        while (newColor == currentColor)
        newColor=(int) random(colorArray.length);
        nextColor = newColor;
    }


  } // end of cS
}

1 个答案:

答案 0 :(得分:0)

将来,请尝试发布MCVE。现在我们无法运行您的代码,因为它包含编译器错误。尽管如此,我们并不需要看到你的整个草图,只是一个可以说明问题的小例子。

但是您的问题是由于您尝试在后台使用Alpha值而引起的。这不能使用background()函数,因为该函数忽略了alpha值,并且它不能使用rect()函数,因为那样你就不会清除旧函数框架 - 您将通过透明矩形看到它们。

相反,您可以使用lerpColor()函数计算一段时间内从一种颜色到另一种颜色的转换。

这是一个在随机颜色之间转换的例子:

 
color fromColor = getRandomColor();
color toColor = getRandomColor();

float currentLerpValue = 0;
float lerpStep = .01;

void draw() {

  color currentColor = lerpColor(fromColor, toColor, currentLerpValue);

  currentLerpValue += lerpStep;
  if (currentLerpValue >= 1) {
    fromColor = currentColor;
    toColor= getRandomColor();
    currentLerpValue = 0;
  }

  background(currentColor);
}

color getRandomColor() {
  return color(random(255), random(255), random(255));
}