我正在使用程序处理并偶然发现了一个难题。 在尝试制作图像色调以使其在一定时间后变得透明时,它将不会这样做,我到目前为止:
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,然而,它只是坐在那里并且之后什么都不做,任何帮助都会非常感激。
答案 0 :(得分:1)
看起来你可能最终会遇到无限循环。只要fade
大于或等于300
,您就会告诉它。但是,您不是在循环中修改fade
,因此它的值永远不会改变。这意味着它永远不会低于300
,因此循环永远不会完成。
也许你的意思是你的循环体看起来像这样:
A = fade;
while (A >= 300)
{
--A;
tint(0, A);
}
还值得注意的是,只有在draw()
的任何拨打电话完全完成后,才会更新显示。这意味着你不会在这样的循环中反复调用tint()
(或任何其他绘图函数)看到任何效果。最后一个呼叫是唯一具有可见效果的呼叫。相反,每次调用A
时,您需要递减并应用draw()
。
最后,我认为tint()
仅影响后续图像;即它不会影响屏幕上已有的内容。也许您应该尝试在draw()
的开头设置色调。