这是扩展包含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]
。