我正在尝试用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;
}
}
我刚刚在原始代码中包含了基本内容,即运行函数运行正常。 代码不起作用,当我按下Fire时它会给我一个错误。错误发生在
BulletArray[Bullets + 1] = new Bullet();
我希望你理解我的意思。
答案 0 :(得分:2)
嗯,首先,你的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();
}
}