我想让点程序在到达边缘时掉转
所以基本上我只是简单地计算一下
x = width/2+cos(a)*20;
y = height/2+sin(a)*20;
它做圆周运动。所以我想通过检查边缘使其转身。我还已经使用println命令确保y达到if条件
class particles {
float x, y, a, r, cosx, siny;
particles() {
x = width/2; y = height/2; a = 0; r = 20;
}
void display() {
ellipse(x, y, 20, 20);
}
void explode() {
a = a + 0.1;
cosx = cos(a)*r;
siny = sin(a)*r;
x = x + cosx;
y = y + siny;
}
void edge() {
if (x>width||x<0) cosx*=-1;
if (y>height||y<0) siny*=-1;
}
}
//setup() and draw() function
particles part;
void setup(){
size (600,400);
part = new particles();
}
void draw(){
background(40);
part.display();
part.explode();
part.edge();
}
他们只是忽略if条件
答案 0 :(得分:3)
您的检查没有问题,问题在于以下事实:大概在下一次通过draw()
时,您会通过重置cosx
的值来忽略对检查所做的操作,并且siny
。
我建议创建两个新变量dx
和dy
(“ d”代表“方向”),它们始终为+1和-1,并更改这些变量以响应您的边缘检查。这是一个最小的示例:
float a,x,y,cosx,siny;
float dx,dy;
void setup(){
size(400,400);
background(0);
stroke(255);
noFill();
x = width/2;
y = height/2;
dx = 1;
dy = 1;
a = 0;
}
void draw(){
ellipse(x,y,10,10);
cosx = dx*20*cos(a);
siny = dy*20*sin(a);
a += 0.1;
x += cosx;
y += siny;
if (x > width || x < 0)
dx = -1*dx;
if (y > height || y < 0)
dy = -1*dy;
}
运行此代码时,您会看到圆圈从边缘弹起: