布尔键[]获得NPE(null指针表达式)Java不知道如何在游戏开始时分配它



这是扩展包含gameloop()的另一个类的主类。
检查了keys()。

private boolean keys[] ;
public void keyPressed(KeyEvent ke){
    keys[ke.getKeyCode()] = true;
}
void keys(){
    if(keys[KeyEvent.VK_Q] == true){ //NPE here (Null Pointer Expression)
        stop();
    } 
    if(keys[KeyEvent.VK_SPACE] == true && jump== false){
        jump = true;
        cjump = true;
        jkptime = System.currentTimeMillis();
        _7zl2m.setVY(-0.4f);
    } 
    if(_7zl2m.getX() >= (bg.getWidth(null) - _7zl2m.getWidth()) && keys[KeyEvent.VK_RIGHT] == true || _7zl2m.getX() <= _7zl2m.getWidth() + 15 && keys[KeyEvent.VK_LEFT] == true || _7zl2m.getY() <= bg.getHeight(null) - 350 && keys[KeyEvent.VK_UP] == true || _7zl2m.getY() >= bg.getHeight(null) - 160 && keys[KeyEvent.VK_DOWN] == true){
        if(keys[KeyEvent.VK_RIGHT] == true || keys[KeyEvent.VK_LEFT] == true){
            _7zl2m.setVX(0.0f);
        }else if(keys[KeyEvent.VK_UP] == true || keys[KeyEvent.VK_DOWN] == true){
            _7zl2m.setVY(0.0f);
        }
    }else{
        if(keys[KeyEvent.VK_RIGHT] == true && jump == false){
            _7zl2m.setVX(0.2f);
        }
        else if(keys[KeyEvent.VK_LEFT] == true && jump == false){
            _7zl2m.setVX(-0.2f);
        }
        if(keys[KeyEvent.VK_UP] == true && jump == false){
            _7zl2m.setVY(-0.2f);
        }
        else if(keys[KeyEvent.VK_DOWN] == true && jump == false){
            _7zl2m.setVY(0.2f);
        }
    }
    if(keys[KeyEvent.VK_RIGHT] == false || keys[KeyEvent.VK_LEFT] == false){    
        _7zl2m.setVX(0.00f);
    }else if (keys[KeyEvent.VK_UP] == false || keys[KeyEvent.VK_DOWN] == false ){
        _7zl2m.setVY(0.0f);
    }
}
//release a key
public void keyReleased(KeyEvent ke){
    keys[ke.getKeyCode()] = false;
}

当然是无效的,因为我还没有按任何键...但是如何解决此问题。我已经尝试了尝试块

您应该在这里最好使用HashSet<Integer>,因为您不知道将按下所有键

初始化它
private Set<Integer> keys = new HashSet<Integer>() ;

添加值,例如

keys.add(someValue);

和检查

keys.contains(someValue);

版本中将其从Set

中删除
keys.remove(someValue);

您是否在任何地方初始化keys[]?您可以使用SMTH,例如private boolean keys[] = new boolean[MAX_KEYS_AMOUNT]

相关内容

最新更新