所以我有一个类项目,我们应该使用MVC重构代码,动画粒子系统使用Java Swing。我们利用Graphics2D
来实现这一点。我可以得到一个粒子渲染,但我有问题渲染所有的。当从输入文件中读取时,控制台读取它添加了5个粒子,但我只看到一个粒子在屏幕上反弹。
当我尝试迭代粒子(PSysModel
)的ArrayList
时,我得到的错误是:
Exception in thread "main" java.lang.StackOverflowError
at java.util.AbstractCollection.toArray(AbstractCollection.java:176)
at java.lang.String.split(String.java:2378)
at java.lang.String.split(String.java:2422)
at PaSkCode.PSysModel.<init>(PSysModel.java:22)
public class PSysView {
PSysModel Psystem;
PSysView() {
}
// draw all particles in psm
void draw(PSysModel psm, Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHints(new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTI ALIAS_ON));
g2d.setColor(Color.RED);
for(int i=1; i<=psm1.particleList.size();i++){
PSysModel psm = psm1.particleList.get(i);
g2d.fillOval(psm.px-psm.radius, psm.py-psm.radius, psm.radius*2, psm.radius*2);
}
}
// dump information on all particles in psm
void dump(PSysModel psm, int lc) {
System.out.println("Frame " + lc);
System.out.println(psm.radius + " " + psm.px + " " + psm.py + " " + psm.velX + " " + psm.velY);
}
}
public class PSysView {
PSysModel Psystem;
PSysView() {
}
// draw all particles in psm
void draw(PSysModel psm, Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHints(new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTI ALIAS_ON));
g2d.setColor(Color.RED);
for(int i=1; i<=psm1.particleList.size();i++){
PSysModel psm = psm1.particleList.get(i);
g2d.fillOval(psm.px-psm.radius, psm.py-psm.radius, psm.radius*2, psm.radius*2);
}
}
// dump information on all particles in psm
void dump(PSysModel psm, int lc) {
System.out.println("Frame " + lc);
System.out.println(psm.radius + " " + psm.px + " " + psm.py + " " + psm.velX + " " + psm.velY);
}
}
@AndrewThompson谢谢!解决方案是创建一个单独的粒子类,并使用ArrayList在模型和视图类中迭代。