处理动画非常紧张

Processing animation very jittery

我只是在修补 Processing 以便按程序制作一些 .gif 动画。出于某种原因,当我 运行 时(以及当我使用 GifAnimation 导出它时),我刚完成的那个有很多抖动。我不完全确定为什么会这样。

请原谅我的代码是黑客工作:

long lastTime = 0;
float angle1, angle2, angle3, angle4, angle5, angle6;
int change;
public void setup() {
  size(120, 120);
  lastTime = millis();
  angle1 = -60;
  angle2 = 240;
  angle3 = -30;
  angle4 = 210; 
  angle5 = -75;
  angle6 = 255;    
  change = 3;

  noFill();
  stroke(0);
  strokeWeight(10);  
  smooth();
}
public void draw() {

  if (millis() - lastTime > 12) {
    background(255,255,255);
    lastTime = millis();    

    stroke(#3aa8c3);
    arc(60, 60, 70, 70, radians(angle1), radians(angle2));
    ellipse(60, 60, 10, 10);

    stroke(#e7e7e7);
    arc(60, 60, 40, 40, radians(angle3), radians(angle4));
    arc(60, 60, 100, 100, radians(angle5), radians(angle6));

    angle1-=change*2;
    angle2-=change*2;
    angle3+=change*3;
    angle4+=change*3;
    angle5+=change;
    angle6+=change;

    }
}

结果如下:

是我做错了什么,还是仅仅是处理环境的限制?

编辑: 将渲染模式更改为 P3D (size(120, 120, P3D);) 后,一切都变得更加流畅。它摆脱了圆形边缘,我不得不添加一些抗锯齿 (smooth(8)),但它不再抖动。透明背景也是一个好处:

如果你post你的问题的最简单形式,你会更幸运,像这样:

public void setup() {
  size(360, 360);
  noFill();
  stroke(0);
  smooth(10);
}
public void draw() {
  background(255);
  stroke(#3aa8c3);
  arc(60, 60, 70, 70, radians(mouseX), radians(mouseY));
}

这使我们能够排除原因并更容易找到解决方案。

此外,我用谷歌搜索了 "processing arc jittery" 和 "processing arc wobble" 并找到了 this 答案,上面说要尝试 hint(ENABLE_STROKE_PURE) 功能。当我将它添加到示例中时,它似乎工作得更好:

public void setup() {
  size(360, 360);
  noFill();
  stroke(0);
  smooth(10);
  hint(ENABLE_STROKE_PURE);
}
public void draw() {
  background(255);
  stroke(#3aa8c3);
  arc(60, 60, 70, 70, radians(mouseX), radians(mouseY));
}

setup() 函数的最后一行添加 hint(ENABLE_STROKE_PURE); 似乎也可以解决您的问题。