我有多个“模式”,可以在屏幕上绘制不同的内容,例如运动,库存。当我在这些之间切换时,我使用的过渡是黑色,然后淡出回到另一种模式。 过渡过程使用millis()及其开始的时间来确定制作覆盖屏幕的黑色矩形的透明度。 但是,在绘制函数的末尾有一个很大的延迟,这正在破坏它。矩形后面绘制的模式更改后,立即发生延迟。它也只会在第一次转换时发生,而不会在随后的转换中发生。 是什么导致延迟,我该如何防止?
我的代码很长,我无法找到可能导致此问题的原因。所以我不确定要发布什么代码。
我尝试使用处理的内置调试器,但是调试器不会暂停millis(),这使其非常无益。
我也尝试过添加几个println()语句作为时间戳,但是这些只能将问题缩小到draw()的末尾与draw()的下一个循环的开始之间
// Transitions
if (p.transMode != ""){
if (timer == 0){
timer = millis();
} // If timer hasn't been started
ctime = millis() - timer; // current time
if (ctime < (transT*2/5)){
fill (0, 0, 0, map(ctime, 0, transT*2/5, 0, 255));
// Get darker
}
else if (ctime < transT/2){
p.transMode != p.mode){fill (0, 0, 0, 255);
p.mode = p.transMode;
// change mode in transition and move if able, fill black
}
else if (ctime < transT){
fill (0, 0, 0, map(ctime - transT/2, 0, transT/2, 255, 0));
// Get lighter
}
else { // If transition finished
timer = 0; // reset timer
p.transMode = ""; // turn off transition
fill(0, 0, 0, 0);
}
// draw transition rectangle
beginShape();
vertex(-100, -100, 200);
vertex(1100, -100, 200);
vertex(1100, 600, 200);
vertex(-100, 600, 200);
endShape();
}
它不会退回到新模式,而是保持全黑更长的时间,然后突然切换到另一种模式(计时器不允许它进入使它退回的if语句)。