数组元素未正确设置

时间:2013-03-01 15:22:23

标签: java arrays logic

您好我有一系列子弹对象。我将子弹对象isAlive var设置为false。 如果我在没有单击空格按钮(触发子弹)的情况下运行代码并打印出数组对象isAlive var并且它们将它们全部打印为false(应该如此)。

如果我在屏幕上出现子弹并且正确移动时单击空格按钮但是当我打印出显示isAlive var的项目符号数组时,它们都被设置为true,具有相同的x / y位置。如果我单击空格按钮两次2发子弹出现并且正常行进但是当我打印阵列时,它显示前十个元素为活着,具有相同的x / y位置(屏幕上的第一个子弹),接下来的十个也是相同的x / y位置(屏幕上的第2个子弹)

再按空格键不会增加新的子弹。 这里;是fireButton()的代码

public void fireBullet(){
    if(currentBullet > BULLETS -1){
        currentBullet = 0;
    }
    if(bullet[currentBullet].isAlive()==false){
        bullet[currentBullet].setAlive(true);
        bullet[currentBullet].setxPos(ship.getxPos());
        bullet[currentBullet].setyPos(ship.getyPos());
    }
    currentBullet ++;
}

这是在KeyPressedMethod

中调用的
case KeyEvent.VK_SPACE: 
        fireBullet();
        break;

任何人都可以看到我出错的地方吗?现在正在搞乱代码一段时间并且我正在努力:)

编辑:如果我能在这里,我会回答所有问题:) 1)currentBullet是一个私有类成员,最初初始化为0,然后在fireBullet()方法中为每个发射到20的子弹增加,然后重置为0.

2)当我使用项目符号数组时,我为每个元素分配了一个新的Bullet()。每个子弹构造函数都设置为isAlive为false

3)子弹var isAlive在离开屏幕时被设置为false 4)这里是完整的按键方法

public void keyPressed(KeyEvent k) {
    int keyCode = k.getKeyCode();

    switch (keyCode) {

    case KeyEvent.VK_A:
        //move ship left
        if(ship.getxPos()<20){
            ship.setxPos(20);
        }else
        ship.setxPos(ship.getxPos()-1);
        break;
    case KeyEvent.VK_D:
        if(ship.getxPos()>1260){
            ship.setxPos(1260);
        }else
        ship.setxPos(ship.getxPos()+1);
        break;
    case KeyEvent.VK_SPACE: 
        fireBullet();
        break;
    }


}//end keypressed event

我认为渲染是好的,因为它正在绘制子弹,但是将10个或者20个绘制在彼此的顶部,所以当代码运行时,你只看到两个子弹在屏幕上移动,

问题是,每个空格键按下只有1个活着的子弹,但是一旦所有20个子弹被设置为活着就按下它!

第二次编辑:我在游戏循环结束时打印出当前的子弹,它似乎正在递增,这表明在每个空格键按下都会调用fireBullet()方法,似乎每个空格键都填满了数组按

1 个答案:

答案 0 :(得分:0)

感谢所有人的工作!就像上面提到的NPE一样,我在fireBullet()方法和其他2个按键中输入了一个小println。发生的事情是当我的代码正在拾取负载时我正在击中空间“命中”。原来我在我的paint方法中有addKeyListener(this),而不是在JFrame构造函数中,老实说,不知道它是如何放入paint方法的:)