所以我有一个类项目,我们应该使用MVC来重构使用Java Swing动画粒子系统的代码。我们利用Graphics2D
来实现这一目标。我可以让一个粒子渲染,但是渲染所有粒子的问题。当从输入文件中读取时,控制台会读取它添加了5个粒子,但我只看到一个粒子在屏幕上弹跳。
当我尝试迭代ArrayList
粒子(PSysModel
)时得到的错误是:
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);
}
}
答案 0 :(得分:0)
@AndrewThompson感谢好友!解决方案是创建一个单独的粒子类,并使用ArrayList在模型和视图类中进行迭代。