class loc {
float[] x;
float[] y;
float v_o_x, v_o_y;
float[] locationx = new float[0];
float[] locationy = new float[0];
loc(float x_o, float y_o, float v_o, float theta, int t_end) {
theta = radians(theta);
v_o_x = v_o_x = v_o * cos(theta);
v_o_y = abs(v_o) * sin(theta);
for (int i=0; i<t_end; i++) {
locationx = append(locationx, (v_o_x * i + x_o));
locationy = append(locationy, (0.5*10*pow(i, 2) - v_o_y*i + y_o));
}
this.x = locationx;
this.y = locationy;
}
}
loc locations;
int wait = 75; // change delay between animation
int i = 0;
int j = 0;
float randV = random(-70, 70);
float randAng = random(30, 50);
int len = 17;
void setup() {
size(1500, 800);
background(255);
}
void draw() {
fill(0);
int d = 20; // diameter
float[] xx, yy;
if (i < len) {
locations = new loc(width/2, height/3.5, randV, randAng, len);
xx = locations.x;
yy = locations.y;
//background(255);
rect(width/2-d, height/3.5+d, d*2, d*2);
float s = 255/locations.x.length;
fill((0+i*s));
ellipse(xx[i], yy[i], d, d);
i += 1;
delay(wait);
} else {
randV = random(-70, 70);
randAng = random(30, 50);
i = 0;
}
}
我编写了一个简单的代码,用于为随机初始角度和速度设置球的轨迹。当它运行时,它会发出一个球,等待着陆,然后再发出一个随机球。我的希望是让它同时发出多个随机球,以创造一种喷泉效果。我有很多麻烦要做到这一点,有什么建议吗?
答案 0 :(得分:2)
现在你已经有了一些代表单个球的位置(和过去位置)的变量。为了这个问题,我会暂时忽略你似乎没有使用其中的一些变量。
您可以复制所有这些变量,并为您想要的每个球重复这些变量。你会有ballOneLocations,ballTwoLocations等。
但那太可怕了,所以你应该把所有这些变量都包装成Ball类。 Ball的每个实例都代表一个单独的球及其过去的位置。
然后你需要做的就是创建一个Ball实例的数组或ArrayList,然后遍历它们来更新和绘制它们。
Here是一个关于如何在Processing中使用OOP创建多个球在屏幕上弹跳的教程。
答案 1 :(得分:2)
与Kevin Workman同意,课程是前往这里的方式。 这篇文章的最佳资源之一是Daniel Shiffman,特别是他的书Nature of Code。您的问题在粒子系统章节(第4章)中处理。