我正在LibGDX中创建小型烟花仿真。我有一个名为particles
的ArrayList,它正在填充它:
for (int i = 0; i < 2; i++) {
Particle p = new Particle();
p.position = position;
p.velocity.x = MathUtils.random(-1f, 1f);
p.velocity.y = MathUtils.random(-1f, 1f);
particles.add(p);
}
然后在更新循环中:
for (int i = 0; i < particles.size(); i++) {
System.out.println(i + " " + particles.get(i).position.toString() + " + " + particles.get(i).velocity.toString() + " = ");
particles.get(i).update();
System.out.println(" " + particles.get(i).position.toString());
}
粒子更新功能:
velocity.add(acceleration);
position.add(velocity);
acceleration.set(0, 0);
速度是随机的,每个粒子都有独特的速度,但位置相同。输出如下:
0 (300.0,620.91364) + (-0.94489133,-0.45628428) = (299.0551,620.45734)1 (299.0551,620.45734) + (0.3956585,0.5208683) = (299.45078,620.9782)0 (299.45078,620.9782) + (-0.94489133,-0.45628428) = (298.5059,620.5219)1 (298.5059,620.5219) + (0.3956585,0.5208683) = (298.90155,621.0428)0 (298.90155,621.0428) + (-0.94489133,-0.45628428) = (297.95667,620.5865)1 (297.95667,620.5865) + (0.3956585,0.5208683) = (298.35233,621.10736)
首先是粒子索引,位置,速度,然后是输出位置。
为什么要使用另一个粒子的位置?我想弄清楚,但我做不到。
最佳答案
在填充ArrayList的for循环中,有以下一行:
p.position = position;
我不知道
position
的来源,但是这里所有的粒子都指向同一个。您必须为每个粒子创建一个新的位置
p.position = new Position(x, y);
如果
position
是粒子的起点,则可以编写:p.position = new Position(position.x, position.y);