问题描述
我有一个关于使用 Processing 的嵌套 For-Loop 动画的问题。 假设我有一个形状网格……我想在一段时间内使用 frameCount 逐行绘制它们。换句话说:第一行 X 轴,第二行 X 轴......等等......我想我可以通过使用正弦波并让它通过带有 waveOffset 的网格运行来实现这一点。但是数学让我头疼……这是我目前想到的:
void setup() {
size(600,600);
}
void draw () {
background(255);
float tiles = 30;
float tileSize = width/tiles;
for (int x = 0; x < tiles; x++) {
for (int y = 0; y < tiles; y++) {
float waveOffset = map(y,600,60,0);
float sin = sin((frameCount*0.05 + waveOffset));
float wave = map(sin,-1,1,tileSize);
fill(0);
nostroke();
pushmatrix();
translate(tileSize/2,tileSize/2);
ellipse(x*tileSize,y*tileSize,wave,wave);
popMatrix();
}
}
}
如何将偏移量写为大腿,使其穿过第一行 X 轴,然后跳转到第二行,穿过 X 轴等等......绘制整个网格后,它会从新开始......
一切顺利!
解决方法
我真的不知道“穿过第 n 行 x 轴”是什么意思,但一个想法是使外部 for 循环像这样:
for (int x = 0; x < frameCount % tiles; x++) {
所以每一帧都会额外绘制一列形状。
,完美!谢谢JSTL!我做了一些细微的改变——但这就是我想要达到的目标!
void draw () {
background(255);
float tiles = 100;
float tileSize = width/tiles;
for (int x = 0; x < tiles; x++) {
for (int y = 0; y < frameCount*100/tiles % tiles; y++) {
fill(0);
noStroke();
pushMatrix();
translate(tileSize/2,tileSize/2);
ellipse(x*tileSize,y*tileSize,tileSize,tileSize);
popMatrix();
}
}
}