我正在尝试用 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();
希望你明白我的意思。
最佳答案
好吧,对于初学者来说,您的 BulletArray
从未初始化。
当您输入 run()
时,您的 for()
循环似乎工作正常,因为它实际上并未进入该 block 。您的 int i = 0
已声明,并且已经大于或等于您的限制,即 int Bullet = 0
。这意味着循环体永远不会执行。
然后,当您按下 Key.FireKey
时,它会尝试引用不存在的数组索引。它不可能存在,因为该数组从未被初始化。
要初始化数组,您需要执行类似以下操作:
private int maxBullets = 10;
Bullet[] bulletArray = new Bullet[maxBullets];
然后你的for()
循环就会真正进入。但请注意,在您的 Key.FireKey
block 中,您必须执行一些检查,以确保您不会因尝试发射更多子弹而出现 IndexOutOfBoundsException
比你创造的还要多。即,
if(Key.FireKey) {
if(bullets < maxBullets) {
bulletArray[++bullets] = new Bullet();
}
}
关于Java-游戏 : Multiple instances,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12712452/