我如何在J2ME中使用GameCanvas来使用keyPressed事件?

时间:2011-12-11 14:33:52

标签: java java-me midp lcdui

嗯,我有一个问题,我无法通过多种方式解决和尝试,但是没有成功。我想按一个按钮,如果它停下来,子弹就不会发射。

所以我尝试了这个,首先:

public void checkInput() {
    int iKeyPressed;

    iKeyPressed = this.getKeyStates();

    if((iKeyPressed & LEFT_PRESSED) != 0) {
        this.player.moveLeft();
    }
    else if((iKeyPressed & RIGHT_PRESSED) != 0) {
        this.player.moveRight();
    }

    if((iKeyPressed & FIRE_PRESSED) != 0 && this.bKeyReleased) {
        Bullet bullet;
        int x;
        int y;

        bullet = new Bullet(loadImage("bullet.png"), 4, 22, 1, (this.player.getVel()*2)*(-1));
        x = (this.player.getX()+(this.player.getWidth()/2))-(bullet.getWidth()/2);
        y = this.player.getY();
        bullet.setPosition(x, y);
        this.lstBullets.addElement(bullet);
        //this.bKeyReleased = false;
    }
}

我在主循环中调用此方法。这样可行,但如果按键保持不动,子弹仍会出现。当我尝试覆盖keyPressed方法时,它不起作用,因为我不知道如何调用此方法。如果我尝试直接在我的主循环中调用它,它不起作用,那么,我怎么能使它工作?

任何人都可以告诉我如何将此方法称为正常工作?

1 个答案:

答案 0 :(得分:1)

getKeyStates()不会报告事件本身。如果按住它,它将在键上返回true,或者在当前对getKeyStates的调用和最后一次调用之间的某个时刻向下返回。您必须覆盖keyReleased方法才能在用户按下按键时执行操作,而不是在按下按键时执行操作。