首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java - Game :多个实例

Java - Game :多个实例
EN

Stack Overflow用户
提问于 2012-10-04 00:07:27
回答 1查看 349关注 0票数 2

我正在尝试用Java做一个游戏,我已经有了一些东西。但我想让玩家开枪。我想出了制作一个对象数组的想法,并将所有的Bullet实例放入数组中。然后在线程中,我想让它们全部移动(数组中的所有对象)。

下面是我放在主类中的内容:

代码语言:javascript
复制
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时,它会给我一个错误。错误在某处

代码语言:javascript
复制
BulletArray[Bullets + 1] = new Bullet();

我希望你能理解我的意思。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-04 00:18:42

首先,你的BulletArray永远不会被初始化。

当您输入run()时,您的for()循环看起来工作正常,因为它实际上并没有进入块。您的int i = 0已声明,并且已大于或等于您的限制(即int Bullet = 0 )。这意味着循环体永远不会执行。

然后,当您按下Key.FireKey时,它会尝试引用一个不存在的数组索引。它不可能存在,因为该数组从未初始化过。

要初始化您的数组,您需要执行更多类似以下操作:

代码语言:javascript
复制
private int maxBullets = 10;
Bullet[] bulletArray = new Bullet[maxBullets];

然后,您的for()循环将实际进入。但是,请注意,在Key.FireKey代码块中,您必须执行一些检查,以确保您不会因为尝试发射比您创建的更多的项目符号而获得IndexOutOfBoundsException。即,

代码语言:javascript
复制
if(Key.FireKey) {
    if(bullets < maxBullets) {
        bulletArray[++bullets] = new Bullet();
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12712452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档