【问题标题】:Java - Game : Multiple instancesJava - 游戏:多个实例
【发布时间】:2012-10-03 16:07:27
【问题描述】:

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

希望你明白我的意思。

【问题讨论】:

  • 抱歉...有什么问题?
  • 有什么问题吗?或者您想告诉我们您正在制作游戏?仅供参考,您应该以小写字母或下划线开头声明您的变量(添加方法)。
  • 您应该应用 Java 命名约定:变量以小型大写字母开头:BulletArray => bulletArray, Bullets => bullets 等。
  • 有什么问题?您是否收到空指针异常?如果是这样,您可以通过将行 BulletArray[Bullets+1] = new Bullet(); 更改为 BulletArray[Bullets] = new Bullet(); 来修复它
  • 您是否注意数组大小,即是否在必要时增加大小?如果数组可以调整大小,我建议使用List

标签: java arrays object


【解决方案1】:

好吧,首先,您的 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();
    }
}

【讨论】:

  • 谢谢,我对 java 还很陌生,当然它是如何处理数组的。我知道这个问题有点愚蠢,但是谢谢!
  • 这不是一个愚蠢的问题。 :) 每个人都必须从某个地方开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
相关资源
最近更新 更多