如何用java制作沙盒游戏

时间:2014-06-17 19:20:40

标签: java nullpointerexception

我正在尝试制作模拟化学反应的游戏。问题是,在大约五个尘埃粒子之后,游戏崩溃了。这是移动粒子的代码:

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/)会非常有帮助,因为这个游戏展示了我想要完成的事情。亲眼看看。

1 个答案:

答案 0 :(得分:1)

我发现TranslateTransition并不具有内存效率。当我描述我的项目时,我注意到每当放置一个粒子时内存峰值都不会回落。

  

您的代码存在许多问题,正如其他人指出的那样,在JavaFX示例(https://gist.github.com/james-d/8327842)中研究这个动画物理,看看如何实现您想要的行为。 - 珠宝7月17日19:30

这个参考确实有帮助。我现在应该能够完成我的比赛了。