2016-08-22 39 views
2

我一直在处理一个游戏,我来到这个问题:我试图与星飞过去的背景,我有这个类:处理上PVector草图崩溃设定

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)); 
    } 
} 

我为明星一个ArrayList名为星:

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

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

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

但是,当drawBg被调用,它会创建一个新的星(),草图崩溃,它指向:

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

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

无法运行草图(目标虚拟机未能初始化)。有关更多 信息,请阅读revisions.txt和Help?故障排除。

请帮忙!谢谢!

+0

能否请您提供一个[MCVE],显示我们你的小品,不只是'Star'其余类?我们应该能够复制和粘贴您的代码以在我们自己的机器上运行它。 –

回答

0

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

你永远不初始化变量(使用new关键字创建的PVector一个新的实例),所以它仍然null当你在Star构造函数中调用position.set()。这会导致错误,因为您无法调用null变量的函数。

为了解决这个问题,只需使用new关键字创建的PVector一个新实例:

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

非常感谢! –