在满足某些条件后使图像变为零不透明度

时间:2014-01-29 21:34:05

标签: if-statement while-loop processing tint

我正在使用程序处理并偶然发现了一个难题。 在尝试制作图像色调以使其在一定时间后变得透明时,它将不会这样做,我到目前为止:

import ddf.minim.*;

Minim minim;
AudioInput in;

PImage img;
int a = 125;//geluidswaarde
int fade = 0;//beginfade grote fade is zwarter
int stmin = 2; //fadestapje donkerder
int stplus = 10; //fadestapje lichter
float gw = 0.04;//gevoeligheid kleiner = gevoeliger
int trmin = 10; // transparanter
int trplus = 20; // voller
int A = 0;

void setup() {
  img = loadImage("leegte.jpg");

  size(1000, 1000);
  frameRate(10); // Maximum 30 frames/beelden per seconde (speel hier gerust even mee)
  image(img, 0, 0);
  minim = new Minim(this); 
  // get a line in from Minim, default bit depth is 16
  in = minim.getLineIn(Minim.STEREO, 640);
}

void draw() {

  image(img, 0, 0);
  fill(255);
  rect(0, 0, 1000, 1000);

  if (abs(in.left.get(a))> (gw)) {
    fade = fade-stplus;
  }
  else {
    fade = fade+stmin;
  }
  fade = constrain(fade, 0, 300);
  fill(0, fade);
  rect(0, 0, 1000, 1000);

  while (fade>=300)
  {
    --A;
    tint(0, A);
  }
}





void stop()



{
  // always close Minim audio classes when you are done with them
  in.close();
  minim.stop();

  super.stop();
}

问题在于

while (fade>=300)
  {
    --A;
    tint(0, A);
  }

部分,在图像达到淡入淡出(0,300)后,我希望它开始着色,因此它从255反对力变为0,然而,它只是坐在那里并且之后什么都不做,任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:1)

看起来你可能最终会遇到无限循环。只要fade大于或等于300,您就会告诉它。但是,您不是在循环中修改fade,因此它的值永远不会改变。这意味着它永远不会低于300,因此循环永远不会完成。

也许你的意思是你的循环体看起来像这样:

A = fade;
while (A >= 300)
{
    --A;
    tint(0, A);
}

还值得注意的是,只有在draw()的任何拨打电话完全完成后,才会更新显示。这意味着你不会在这样的循环中反复调用tint()(或任何其他绘图函数)看到任何效果。最后一个呼叫是唯一具有可见效果的呼叫。相反,每次调用A时,您需要递减并应用draw()

最后,我认为tint()仅影响后续图像;即它不会影响屏幕上已有的内容。也许您应该尝试在draw()的开头设置色调。