2012-10-03 75 views
2

我想用Java做一个游戏,而且我已经有了一些东西。但我想让玩家拍子弹。 我想出了构建对象数组的想法,并将所有Bullet实例放入数组中。然后在一个线程中,我想让它们全部移动(数组中的所有对象)。Java - 游戏:多个实例

这是我放在主类:

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

对不起......有什么问题吗? – manub

+0

这是什么问题?或者你想告诉我们你正在做一个游戏?和FYI。,你应该声明你的变量(要添加,方法也是),以小写字母或下划线开头。 –

+1

你应该应用Java命名约定:变量以小写字母开头:BulletArray => bulletArray,Bullets =>项目符号等。 – assylias

回答

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(); 
    } 
} 
+0

谢谢,我对java很陌生,当然它是如何处理数组的。我知道这个问题有点愚蠢,但谢谢! – DemoDreams

+1

这不是一个愚蠢的问题。 :)每个人都必须从某个地方开始。 – asteri