мдя. не понимаю, что сдесь может не работать
final int keyStates = getKeyStates();
if((keyStates & FIRE_PRESSED) != 0) ball.jump( ball.getRadius() );
if((keyStates & UP_PRESSED) != 0) ball.moveOnward( ball.getRadius()/2 );
if((keyStates & DOWN_PRESSED) != 0) ball.moveOnward( -ball.getRadius()/2 );
if((keyStates & LEFT_PRESSED) != 0) ball.rotY(-5);
if((keyStates & RIGHT_PRESSED) != 0) ball.rotY(5);
и почему именно 5 работает.
может из-за того что я в новой версии зачем-то написал protected void keyRepeated(int keyCode) {}
где-то читал, что для getKeyStates() нужна в методах keyPressed, keyReleased вызывать эти метод супер класса т.е. super.keyPressed. хотя я этого никогда не делал.
Вот версия без keyRepeated. может и вправду он виноват
и сейчвс при нажатии кнопки в верхнем правом углу должен писаться keyStates, если кнопка сработала.