如何解决使用 Processing 在 OoP 中围绕自己的轴旋转
我目前在编写处理草图方面有些困难。假设我有一堆矩形,它们像气泡一样在草图窗口向上移动……它们有不同的大小和颜色……我想让它们在向上移动时围绕自己的轴旋转。我尝试使用 pushMatrix();和 popMatrix(); – 甚至 translate();但我想它有点复杂,因为我在构造函数中为每个矩形的 X 和 Y 位置使用了 OoP 和变量......
这是我的草图的代码:
Rectangle[] rectangles = new Rectangle[10];
void setup() {
size(360,640);
for (int i = 0; i < rectangles.length; i++) {
rectangles[i] = new Rectangle(random(0,width),random(20,200),random(0,250));
}
}
void draw() {
background(255);
for (int i = 0; i < rectangles.length; i++) {
rectangles[i].display();
rectangles[i].ascend();
rectangles[i].top();
}
}
对于类矩形,它是:
class Rectangle {
float x;
float y;
float speed;
float d;
float c;
Rectangle(float tempX,float tempD,float tempC) {
rectMode(CENTER);
x = tempX;
y = height + d/2;
d = tempD;
speed = random(0.5,2.5);
c = tempC;
}
void display() {
noStroke();
fill(c);
rect(x,y,d,d);
}
void ascend() {
y = y - speed;
}
void top() {
if (y < -d/2) {
y = height + d/2;
}
}
}
这是我尝试过的,通常有效:
void display() {
noStroke();
fill(c);
pushMatrix();
translate(width/2,height/2);
rotate(radians(frameCount));
rect(x,d);
popMatrix();
}
如果有人有想法或暗示我遗漏了什么,我会非常感谢! 提前感谢您的任何帮助!
一切顺利!
解决方法
在原地旋转某物时,通常最有效的方法是使用 translate
,这样您就可以“在原点”绘制它。在您的情况下,这意味着您要进行转换,使 rect()
的前两个参数都为零。所以你平移,然后旋转,然后在“原点”绘制矩形。
解决方案:
pushMatrix();
translate(x,y);
rotate(radians(frameCount));
rect(0,d,d);
popMatrix();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。