0

キャラクターを左右に動かし、左右の矢印キーから指を離すと停止するようにしようとしていますが、彼は動き続けます。これが私のキープレスです:

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;
}
}

私が言いたいのは、彼のアニメーションは決して止まらないので、彼は続けているということです. 誰かがそれを確認できるかどうか疑問に思っています。

4

0 に答える 0