首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java KeyPressed KeyRelease和持有密钥

Java KeyPressed KeyRelease和持有密钥
EN

Stack Overflow用户
提问于 2013-12-11 22:25:42
回答 1查看 410关注 0票数 0

我试着让我的角色左右移动,然后当你的手指离开左右箭头键时停止移动,但一直发生的是他一直在移动。这是我的按键:

代码语言:javascript
复制
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:

代码语言:javascript
复制
    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行代码,只要要求我发布声明变量的位置,或者类似于您需要更多信息来找出问题所在的内容。

我现在一直在想,我的角色是否因为他的动画而继续前进,也许他的设定图像一直导致他继续前进。

这就是他的动画。

代码语言:javascript
复制
     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://default of him standing still
            g2d.drawImage(imgAstroStandLeft, nAstronautX + 1, nAstronautY + 1, this);
            break;
    }
}

public void DrawAstronautRight(Graphics2D g2d) {//Same as the left but right
    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;
    }
}

我的意思是,他继续前进,因为他的动画永远不会停止。想知道是否有人能证实这一点。

EN

回答 1

Stack Overflow用户

发布于 2013-12-11 22:33:48

您正在访问两种不同类型的键常量。一方面你在使用KeyEvent,另一方面你在使用Event

KeyEvent类中,它是:

代码语言:javascript
复制
/**
 * Constant for the non-numpad <b>left</b> arrow key.
 * @see #VK_KP_LEFT
 */
public static final int VK_LEFT           = 0x25;   // = 37

Event类中,它是:

代码语言:javascript
复制
/**
 * The Left Arrow key, a non-ASCII action key.
 */
public static final int LEFT                = 1006;

由于getKeyCode()方法从KeyEvent类返回常量,因此必须在中使用两种情况下的KeyEvent.VK_LEFT常量。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20521693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档