我正在尝试制作模拟化学反应的游戏。问题是,在大约五个尘埃粒子之后,游戏崩溃了。这是移动粒子的代码:
public class Element extends Thread {
long temperature;
double x;
double y;
double XVel;
double YVel = 5;
ImageView iv;
Duration dur;
TranslateTransition tt = new TranslateTransition();
@Override
public void run() {
while (true) {
move();// calls the movement method repeatedly
try {
Thread.sleep(10);
} catch (InterruptedException ex) {
Logger.getLogger(Element.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public void initialize() {
this.start();
}
/**
* @return the temperature
*/
public long getTemperature() {
return temperature;
}
public void checkCollisions() {
}
public void move() {
tt.setDuration(dur.millis(5));
tt.setByY(YVel);
tt.setCycleCount(1);
tt.setNode(iv);
tt.play();
}
}
然后,出现此异常,游戏停止工作:
java.lang.NullPointerException
at com.sun.scenario.animation.AbstractMasterTimer.timePulseImpl(AbstractMasterTimer.java:366)
at com.sun.scenario.animation.AbstractMasterTimer.timePulseImpl(AbstractMasterTimer.java:366)
at com.sun.scenario.animation.AbstractMasterTimer$MainLoop.run(AbstractMasterTimer.java:289)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:459)
at com.sun.javafx.tk.quantum.QuantumToolkit$9.run(QuantumToolkit.java:332)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:17)
at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:67)
at java.lang.Thread.run(Thread.java:744)
我不知道为什么会发生NullPointerException,任何人都可以帮助我(我正在使用JavaFX)? 如果有人可以告诉我这个游戏是如何做到的(http://dan-ball.jp/en/javagame/dust/)会非常有帮助,因为这个游戏展示了我想要完成的事情。亲眼看看。
答案 0 :(得分:1)
我发现TranslateTransition并不具有内存效率。当我描述我的项目时,我注意到每当放置一个粒子时内存峰值都不会回落。
您的代码存在许多问题,正如其他人指出的那样,在JavaFX示例(https://gist.github.com/james-d/8327842)中研究这个动画物理,看看如何实现您想要的行为。 - 珠宝7月17日19:30
这个参考确实有帮助。我现在应该能够完成我的比赛了。