我正在查看教室中的Processing参考资料,并在动画中汇总了几个示例。我的教授没有在课堂上教这些材料,并告诉我,我可能会在Stack Overflow上找到更好的运气从社区获得帮助。我的问题如下。
当ry
达到70时,旋转停止。我在我的代码中对问题所在的位置发表评论。
我正在尝试制作连续流畅的动画。
int x = 200;
int y = 350;
int cubeWidth = 300;
int cubeHeight = 2;
float rY = 0.1;
float rX = 0.1;
void setup() {
size(640, 360, P3D);
}
void draw() {
background(3);
lights();
fill(247, 7, 12);
rY = constrain(rY, 0, 70);
rX = constrain(rX, 0, 70);
pushMatrix();
translate(441, height/cubeHeight, 0);
rY = rY + .005;
println(rY);
rotateY(rY); // <--- here, when rY hits 70, it stops
rX += rX;
rotateX(rX);
noStroke();
box(69);
popMatrix();
pushMatrix();
translate(470, height*0.49, -221);
rY = rY + .005;
println(rY);
rotateY(rY);
rX += rX;
rotateX(rX);
noFill();
stroke(238);
sphere(282);
popMatrix();
}
答案 0 :(得分:0)
这正是你在这行代码中告诉它的事情:
rY = constrain(rY, 0, 70);
constrain()
函数将值限制为最小值和最大值,在本例中为0
和70
。
如果你拿出那条线,你的草图会继续旋转。更多信息可以在the reference找到。
请注意,您使用rX
变量做了一些奇怪的事情。由于某种原因,你似乎每次都加倍。如果你不限制它,这很快就会变得太大。但由于您只将.005
添加到rY
,因此您无需限制它。
答案 1 :(得分:0)
rY = constrain(rY, 0, 70);
就是问题所在。你刚刚给了旋转一个终点。我稍微更改了代码,因为存在一些逻辑错误,因此它一直在向无穷大添加值。
rX += rX;
增加加速度,所以一段时间后你会得到一个大的物体速度,例如(0.1 + 0.1 = 0.2;下一帧0.2 + 0.2 = 0.4 ......等等)。如果你能想象每秒有100帧,那么它很快就会变得非常快。因此,您只需要添加速度,而不是加速度rX += 1
,每个帧将更新旋转一个角度。
并且您编写了两次代码,因此在一个帧中它变得更大。我分享了我更新的代码,也许会更清楚地看到它的变化。
float rY = 0.1;
float rX = 0.1;
void setup() {
size(640, 360, P3D);
}
void draw() {
background(3);
lights();
fill(125, 175, 225,175);
pushMatrix();
translate(width/2, height/2); // you do not need to write translate twice
//box
rY += 0.01; // you need only once to add the rotation value per frame
rotateY(-rY); // negative rotation for the difference from sphere
rX += 0.01;
rotateX(-rX);
noStroke();
box(50);
//sphere
rotateY(rY);
rotateX(rX);
noFill();
stroke(125, 175, 225,125);
sphere(125);
popMatrix();
println(rY);
}