所以我遇到了添加到ArrayList或链接列表的问题(尝试了两者,但每次崩溃都相同)。我正在使用AndEngine教程(Jimvaders,它运行良好),但是当它适应我自己的项目时,它无法正常工作。基本上,当我射击子弹时,它会被添加到子弹列表中,但是在我的项目中,尝试从playerChar类触摸位于GameScene中的ArrayList或LinkedList会导致整个游戏崩溃。我还没有对列表做任何事情,所以这只是将我的PlayerBullet添加到导致问题的列表中的行为。
GameScene:
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);
}
任何见解都会有所帮助。感谢
答案 0 :(得分:1)
我的猜测是你有一个NullPointerException,虽然如果你告诉我们会有帮助。这一行:
scene.bulletList.add(b);
要求scene
和scene.bulletList
都为非空。我们可以告诉scene
非空,但我怀疑scene.bulletList
为空 - 你在哪里认为你正在初始化它?
(顺便说一句,我强烈建议你避免使用公共变量。我可能会将addBullet
方法放入GameScene
- 并且可能会生成现在私有的类型{{1}变量bulletList
...仅在初始化变量时指定List<PlayerBullet>
。)