java - 数组元素设置不正确

标签 java arrays logic

您好,我有一个项目符号对象数组。我将项目符号对象的 isAlive var 设置为 false。 如果我在不单击空格按钮(发射子弹)的情况下运行代码并打印出数组对象 isAlive var 并且它打印它们都是假的(因为它应该)。

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

再按空格键不会添加新的项目符号。 这里是 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是一个私有(private)类成员,首先初始化为0,然后在fireBullet()方法中对每发一颗子弹递增,直到20发再重置为0。

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

3)当子弹离开屏幕时,它的变量 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() 方法,似乎每个数组都充满了活着的子弹按

最佳答案

谢谢,一切正常!就像 NPE 上面建议的那样,我在 fireBullet() 方法和其他 2 个按键中放入了一个小的 println。 '命中'。结果我在我的 paint 方法中有 addKeyListener(this) 而不是在 JFrame 构造函数中,老实说不知道它是如何放在 paint 方法中的:)

关于java - 数组元素设置不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15161102/

相关文章:

java - 对于来自 Visual Studio/C# 背景并想学习 Java 的人 - 我应该得到 : Netbeans or Eclipse?

Java时间: How to interpret time of ISO_DATE_TIME format

java - 使用字符串将 boolean 变量传递给 Arraylist

java - 如何按指定大小获取数组列表中字符串的所有排列

javascript - 如何调用 JavaScript 数组中定义的函数

javascript - 当设置为默认值时如何检索值?

sql - 将两个 SELECT 查询合并为一个

java - com.sun.jdi.InvocationException 发生调用方法

循环运行时出现 Java 逻辑错误 : If/else counter incorrectly counting

java - 将动态 json 对象映射到 java