Java-游戏 : Multiple instances

标签 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;
    }
}

我刚刚在原始代码中包含了基本内容,即 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/

相关文章:

java - Java中对象在内存中的字段和值遍历

object - 钛手机-通用JS。启动 fireEvent 时对象值会丢失

c++ - 如何将一个对象的多个实例发送到一个函数中

java - 如何在 jFreeChart 中获取完成绘制条形图的事件?

java - 在Linux上编译.java文件

c++ - 如何从函数返回多维 Mat 数组

javascript - 为什么数组中的索引会破坏 TypeScript 中的类型安全?

java - 数据库中每笔交易的通知

java - 使用 Apache POI 和 TestNG 框架将数据写入 Excel

javascript - 使用数组查找匹配项的“For”循环不执行