0

在这个游戏中,我试图在给定坐标产生多个激光,但由于某种原因,每次 numLasers 大于 1 时应用程序都会崩溃。我已经尝试了所有方法,我真的可以使用一些帮助。

这是我的代码:

public class LaserSpawn {

    private int amountOfVisibleLasers;
    private Context context;
    private long timeLastCreatedLaser;
    private Laser[] holderLaser;

    public LaserSpawn(Context context, int numLasers){
        this.context = context;
        holderLaser = new Laser[numLasers];

        this.amountOfVisibleLasers = numLasers;
        for(int i = 0; i< numLasers; i++){
            holderLaser[0] = new Laser(context, -10, -10);
        }
    }

    public void updatePlayerLaser(boolean shootLaser, float x, float y) {
    // Check if a new Laser should be created

    if(shootLaser == true) {    
        if(timeLastCreatedLaser + 100 < System.currentTimeMillis()) {
            timeLastCreatedLaser = System.currentTimeMillis();
            boolean createdNewLaser = false;

            for(int i = 0; i < this.amountOfVisibleLasers; i++) {
                if(createdNewLaser == false) {
                    if(holderLaser[i].isDisposed()) {
                        this.generateNewLaser(i,x,y);
                        createdNewLaser = true;

                    }
                }
            }
        }
    }

    // Update all the other Lasers
    for(int i = 0; i < this.amountOfVisibleLasers; i++) {
        if(holderLaser[i].isDisposed() == false) {
            holderLaser[i].update();
        }

    }

}

private void generateNewLaser(int i, float x, float y) {
    holderLaser[i].setY(y);
    holderLaser[i].setX(x);
}

谢谢!

4

1 回答 1

3

我很确定这是你的问题:

holderLaser[0] = new Laser(context, -10, -10);

您只能在数组的第一个位置创建一个new Laser。如果您尝试访问第二个,您将获得一个null pointer exception.

它应该是这样的

holderLaser[i] = new Laser(context, -10, -10);
于 2012-05-22T06:23:28.507 回答