Выпуск ключа Java не прекращается
Я пытаюсь заставить моего персонажа двигаться влево и вправо, а затем остановиться, когда вы убираете пальцы с клавиш со стрелками влево или вправо, но все же происходит то, что он продолжает двигаться. Вот мое нажатие клавиш:
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();//getting keycodes
if (bInGame) {
if (key == KeyEvent.VK_LEFT) {
nReqdx = -1;
nReqdy = 0;
}
} else if (key == KeyEvent.VK_RIGHT) {
nReqdx = 1;
nReqdy = 0;
}
} else if (key == KeyEvent.VK_SPACE) {//Interaction
//Yet to be filled
} else if (key == KeyEvent.VK_ESCAPE && tTimer.isRunning()) {
bInGame = false;
} else if (key == KeyEvent.VK_PAUSE) {
if (tTimer.isRunning()) {
tTimer.stop();
} else {
tTimer.start();
}
}
} else {
if (key == 's' || key == 'S') {
bInGame = true;
GameRun();
}
}
}
И вот мой KeyReleased:
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if (key == Event.LEFT || key == Event.RIGHT) {
bMoving = false;
if (bMoving == false) {
nReqdx = 0;
nReqdy = 0;
nCurrentSpeed = 0;
}
}
}
Я обнаружил, что он никогда не достигнет ключевого релиза, я думаю, но я не знаю почему. Также не просите меня публиковать весь мой код, потому что у меня около 450 строк, просто попросите меня публиковать, где объявлена переменная или что-то в этом роде, если вам нужно больше информации, чтобы выяснить, что происходит не так.
Теперь я задаюсь вопросом, продолжает ли мой персонаж двигаться, потому что он анимирован, может быть, его заставки заставляют его уходить.
Вот где он анимирован.
public void DoAnimation() {
nAstroImgCount--;
if (nAstroImgCount <= 0) {
nAstroImgCount = nASTROIMGDELAY;
nAstroAnimPos = nAstroAnimPos + nAstroImgDir;
if (nAstroAnimPos == (nASTROANIMIMGCOUNT - 1) || nAstroAnimPos == 0) {
nAstroImgDir = -nAstroImgDir;
}
}
}
public void DrawAstronaut(Graphics2D g2d) {
if (nViewDX == -1) {
DrawAstronautLeft(g2d);
} else if (nViewDX == 1) {
DrawAstronautRight(g2d);
} else {
DrawAstronautStand(g2d);
}
}
public void DrawAstronautLeft(Graphics2D g2d) {
switch (nAstroAnimPos) {
case 1:
g2d.drawImage(imgAstroWalkLeft1, nAstronautX + 1, nAstronautY + 1, this);
break;
case 2:
g2d.drawImage(imgAstroWalkLeft2, nAstronautX + 1, nAstronautY + 1, this);
break;
case 3:
g2d.drawImage(imgAstroWalkLeft3, nAstronautX + 1, nAstronautY + 1, this);
break;
case 4:
g2d.drawImage(imgAstroWalkLeft4, nAstronautX + 1, nAstronautY + 1, this);
break;
case 5:
g2d.drawImage(imgAstroWalkLeft5, nAstronautX + 1, nAstronautY + 1, this);
break;
case 6:
g2d.drawImage(imgAstroWalkLeft6, nAstronautX + 1, nAstronautY + 1, this);
break;
default:
g2d.drawImage(imgAstroStandLeft, nAstronautX + 1, nAstronautY + 1, this);
break;
}
}
public void DrawAstronautRight(Graphics2D g2d) {
switch (nAstroAnimPos) {
case 1:
g2d.drawImage(imgAstroWalkRight1, nAstronautX + 1, nAstronautY + 1, this);
break;
case 2:
g2d.drawImage(imgAstroWalkRight2, nAstronautX + 1, nAstronautY + 1, this);
break;
case 3:
g2d.drawImage(imgAstroWalkRight3, nAstronautX + 1, nAstronautY + 1, this);
break;
case 4:
g2d.drawImage(imgAstroWalkRight4, nAstronautX + 1, nAstronautY + 1, this);
break;
case 5:
g2d.drawImage(imgAstroWalkRight5, nAstronautX + 1, nAstronautY + 1, this);
break;
case 6:
g2d.drawImage(imgAstroWalkRight6, nAstronautX + 1, nAstronautY + 1, this);
break;
default:
g2d.drawImage(imgAstroStandRight, nAstronautX + 1, nAstronautY + 1, this);
break;
}
}
Я имею в виду, что он продолжает идти, потому что его анимация никогда не останавливается. Хотите знать, если кто-то может подтвердить это или нет.