Java - 游戏:多个实例

时间:2012-10-03 16:07:27

标签: java arrays object

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

我希望你理解我的意思。

1 个答案:

答案 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();
    }
}