1

所以我在添加到 ArrayList 或 Linked List 时遇到了问题(两者都试过,但每次崩溃都一样)。我正在研究 AndEngine 教程(Jimvaders,效果很好),但是在将其调整到我自己的项目时,它无法正常工作。基本上,当我射击子弹时,它会被添加到子弹列表中,但在我的项目中,试图从 playerChar 类中触摸位于 GameScene 中的 ArrayList 或 LinkedList 会导致整个游戏崩溃。我什至还没有对列表做任何事情,所以据我所知,这只是将我的 PlayerBullet 添加到导致问题的列表的行为。

游戏场景:

public ArrayList<PlayerBullet> bulletList;

在我的 PlayerChar 类中

public void shoot(int playerFacing) { //TODO

    GameScene scene = (GameScene) BaseActivity.getSharedInstance().getCurrentScene();
    float shootX = 2;

    PlayerBullet b =(PlayerBullet)PlayerBulletPool.sharedBulletPool().obtainPoolItem();

    if (playerFacing == -1){
        shootX *= -1;
    }
    else{
        shootX += this.getWidth();
    }


    b.sprite.setPosition(this.getX() + shootX, this.getY()+(this.getHeight()/2));
    MoveXModifier mod = new MoveXModifier(0.5f, b.sprite.getX(), mCamera.getCenterX() + (mCamera.getWidth()*playerFacing));

    b.sprite.setVisible(true);
    b.sprite.detachSelf();
    scene.attachChild(b.sprite);
    //Log.v("checkin", "works to here");
    scene.bulletList.add(b);//<---------Crashes Here, works fine if this line is commented out

    //Log.v("checkin", "still working?");
    b.sprite.registerEntityModifier(mod);

}

任何见解都会有所帮助。谢谢

4

1 回答 1

1

我的猜测是你有一个 NullPointerException,尽管如果你告诉我们它会有所帮助。这一行:

scene.bulletList.add(b);

要求scenescene.bulletList都是非空的。我们可以说它scene是非空的,但我怀疑它scene.bulletList是空的——你认为你在哪里初始化它?

(顺便说一句,我强烈建议您避免使用公共变量。我可能会将一个addBullet方法放入GameScene- 并且可能使现在私有bulletList变量的类型List<PlayerBullet>......仅ArrayList<E>在初始化变量时指定。)

于 2012-06-29T16:54:55.593 回答