【问题标题】:Processing sketch crashes on PVector set处理 Pvector 集上的草图崩溃
【发布时间】:2016-08-22 18:49:33
【问题描述】:

我一直在处理一个游戏,我遇到了这个问题:我正在尝试制作一个星星飞过的背景,我有这个类:

public class Star {
  PVector position;
  float speed;

  void draw() {
    fill(255);
    ellipse(position.x, position.y, speed, speed);

    position.x -= speed;
  }

  public Star() {
    speed = random(5);
    position.set(width+speed,random(height));
  }
}

我有一个名为 stars 的 ArrayList:

ArrayList<Star> stars = new ArrayList<Star>();

我在函数drawBg()中调用构造函数:

if(random(12) < 1) {
  stars.add(new Star());
}

但是当 drawBg 被调用并创建一个新的 Star() 时,草图崩溃并指向:

position.set(width+speed,random(height));

IDE 说“无法运行草图”,控制台说:

无法运行草图(目标 VM 无法初始化)。更多 信息,阅读 revisions.txt 和帮助?疑难解答。

请帮忙!谢谢!

【问题讨论】:

  • 您能否提供一个minimal reproducible example 向我们展示您的草图的其余部分,而不仅仅是Star 类?我们应该能够复制并粘贴您的代码以在我们自己的机器上运行它。

标签: java crash processing


【解决方案1】:

默认情况下,您的position 变量是null,这意味着它还没有指向PVector 的实例。

您永远不会初始化该变量(使用new 关键字创建PVector 的新实例),因此当您在Star 中调用position.set() 时,它仍然是null构造函数。这会导致错误,因为您不能在 null 变量上调用函数。

要解决此问题,只需使用 new 关键字创建 PVector 的新实例:

public Star() {
    speed = random(5);
    position = new PVector(width+speed,random(height));
}

【讨论】:

  • 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 2019-01-19
相关资源
最近更新 更多