2

我正在尝试用 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();

我希望你明白我的意思。

4

1 回答 1

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因为尝试发射比您创建的更多的子弹而得到一个。IE,

if(Key.FireKey) {
    if(bullets < maxBullets) {
        bulletArray[++bullets] = new Bullet();
    }
}
于 2012-10-03T16:18:42.323 回答