我只是在修补处理,以便在程序上制作一些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;
}
}
动画。出于某种原因,我刚刚完成制作的那个在运行它时会产生很多抖动(当我使用GifAnimation导出时也是如此)。我不完全确定为什么会这样。
请原谅我的代码中的黑客工作:
size(120, 120, P3D);
结果如下:
这是我做错了什么,还是只是对处理环境的限制?
编辑:
将渲染模式更改为P3D(smooth(8)
)后,事情变得更加顺利。它摆脱了圆形边缘,我不得不添加一些抗锯齿({{1}}),但它不再抖动。透明背景也是一个奖励:
答案 0 :(得分:1)
如果你发布最简单的问题形式,你会有更好的运气,如下所示:
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));
}
这使我们能够消除原因并更容易找到解决方案。
另外,我用谷歌搜索“处理弧形抖动”和“处理弧形摆动”并找到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));
}
添加hint(ENABLE_STROKE_PURE);
作为setup()
功能的最后一行似乎也解决了您的问题。