绘制循环结束导致大量延迟

时间:2019-09-13 00:25:42

标签: loops processing draw lag

我有多个“模式”,可以在屏幕上绘制不同的内容,例如运动,库存。当我在这些之间切换时,我使用的过渡是黑色,然后淡出回到另一种模式。 过渡过程使用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语句)。

0 个答案:

没有答案
相关问题