Выпуск ключа 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;
}
}

Я имею в виду, что он продолжает идти, потому что его анимация никогда не останавливается. Хотите знать, если кто-то может подтвердить это или нет.

0 ответов

Другие вопросы по тегам