Java 使用我自己的舞台系统进行处理时颜色转换闪烁
我正在试验处理,我为我的项目编写了一个非常简单的阶段系统。我有三个阶段: 0-持续2秒,灰色屏幕 1-持续1秒,从黑色过渡到白色 2-持续2秒,从白色过渡到黑色 第1阶段和第2阶段反复重复,有时在任一阶段的最后一帧和下一阶段的第一帧之间,屏幕会闪烁(我想你自己会看到)Java 使用我自己的舞台系统进行处理时颜色转换闪烁,java,animation,processing,Java,Animation,Processing,我正在试验处理,我为我的项目编写了一个非常简单的阶段系统。我有三个阶段: 0-持续2秒,灰色屏幕 1-持续1秒,从黑色过渡到白色 2-持续2秒,从白色过渡到黑色 第1阶段和第2阶段反复重复,有时在任一阶段的最后一帧和下一阶段的第一帧之间,屏幕会闪烁(我想你自己会看到) 我知道我在某个地方犯了一个愚蠢的错误,我只需要找出其中的位置:)设置背景时,这似乎与你除以整数有关。让他们漂浮似乎可以解决问题。。。因此,在开关(子状态)的intro()中{ 而不是 background((millis() -
我知道我在某个地方犯了一个愚蠢的错误,我只需要找出其中的位置:)设置背景时,这似乎与你除以整数有关。让他们漂浮似乎可以解决问题。。。因此,在开关(子状态)的intro()中{ 而不是
background((millis() - counter) * 255 / 1000);
及
做
及
我已经设法解决了我的问题
void intro() {
System.out.println(substate);
switch (substate) {
case 0:
setSubState(2000, 1);
break;
case 1:
setSubState(1000, 2);
if (substate == 1) {
background(calc(1000, 256));
}
break;
case 2:
setSubState(2000, 1);
if (substate == 2) {
background(256 - calc(2000, 256));
}
break;
}
}
int calc(int max, int val) {
int r;
if ((millis() - counter) > max) {
r = val;
} else {
r = (millis() - counter) * val / max;
}
System.out.println(r);
return r;
}
void setState(int ms, int s) {
if (millis() >= counter + ms) {
state = s;
counter = millis();
}
}
void setSubState(int ms, int s) {
if (millis() >= counter + ms) {
substate = s;
counter = millis();
}
}
使用非标准API不会帮助用户回答您的问题……它不会改变任何事情
background(255 - (millis() - counter) * 255 / 2000);
background((millis() - counter) * 255 / 1000.0);
background(255 - (millis() - counter) * 255 / 2000.0);
void intro() {
System.out.println(substate);
switch (substate) {
case 0:
setSubState(2000, 1);
break;
case 1:
setSubState(1000, 2);
if (substate == 1) {
background(calc(1000, 256));
}
break;
case 2:
setSubState(2000, 1);
if (substate == 2) {
background(256 - calc(2000, 256));
}
break;
}
}
int calc(int max, int val) {
int r;
if ((millis() - counter) > max) {
r = val;
} else {
r = (millis() - counter) * val / max;
}
System.out.println(r);
return r;
}
void setState(int ms, int s) {
if (millis() >= counter + ms) {
state = s;
counter = millis();
}
}
void setSubState(int ms, int s) {
if (millis() >= counter + ms) {
substate = s;
counter = millis();
}
}