我正在尝试用Java做一个游戏,我已经有了一些东西。但我想让玩家开枪。我想出了制作一个对象数组的想法,并将所有的Bullet实例放入数组中。然后在线程中,我想让它们全部移动(数组中的所有对象)。
下面是我放在主类中的内容:
Bullet[] BulletArray;
public int Bullets = 0;
public void run() {
for(int i = 0; i < Bullets; i++){
BulletArray[i].Step();
}
if(Key.FireKey){
BulletArray[Bullets + 1] = new Bullet();
Bullets += 1;
}
}我只是在原始代码中包含了一些基本的东西,即run函数运行良好。代码不起作用,当我按下Fire时,它会给我一个错误。错误在某处
BulletArray[Bullets + 1] = new Bullet();我希望你能理解我的意思。
发布于 2012-10-04 00:18:42
首先,你的BulletArray永远不会被初始化。
当您输入run()时,您的for()循环看起来工作正常,因为它实际上并没有进入块。您的int i = 0已声明,并且已大于或等于您的限制(即int Bullet = 0 )。这意味着循环体永远不会执行。
然后,当您按下Key.FireKey时,它会尝试引用一个不存在的数组索引。它不可能存在,因为该数组从未初始化过。
要初始化您的数组,您需要执行更多类似以下操作:
private int maxBullets = 10;
Bullet[] bulletArray = new Bullet[maxBullets];然后,您的for()循环将实际进入。但是,请注意,在Key.FireKey代码块中,您必须执行一些检查,以确保您不会因为尝试发射比您创建的更多的项目符号而获得IndexOutOfBoundsException。即,
if(Key.FireKey) {
if(bullets < maxBullets) {
bulletArray[++bullets] = new Bullet();
}
}https://stackoverflow.com/questions/12712452
复制相似问题