【问题标题】:Java 2 ME GameCanvas -- How to receive all keyPressed events?Java 2 ME GameCanvas -- 如何接收所有 keyPressed 事件?
【发布时间】:2011-10-17 04:55:07
【问题描述】:

你好
我正在编写简单的 j2me 计算器。使用 GameCanvas 类作为我的界面的基础。我需要同时处理数字键盘按键事件和与游戏相关的事件(例如 UPDOWNFIRE 等)以移动光标。问题是模拟器和我的索尼爱立信都没有收到一些数字键盘和游戏相关的事件。例如,我得到 SOFT1SEND24ASTERISK 键按下事件,但不接收 13LEFTRIGHUPDOWNFIRE 事件。

class CalculatorCanvas extends GameCanvas
{
    public CalculatorCanvas() throws java.io.IOException
    {
        super(true);
        setFullScreenMode(true);

        cursor = new Sprite(Image.createImage("/cursor.png"));
    }

    public void paint(Graphics g)
    {
        g.setColor(0);
        g.fillRect(0, 0, getWidth(), getHeight());
        cursor.paint(g);
    }

    protected void keyPressed(int keyCode)
    {
        System.out.println("keyPressed: " + getKeyName(key));
        if (keyCode == getKeyCode(RIGHT))
            cursor.move(STEP, 0);
        if (key == getKeyCode(LEFT))
            cursor.move(-STEP, 0);
            /*...*/
        repaint();
    }

    private final int STEP = 3;
    private Sprite cursor;
}  

如何接收所有这些事件?
提前致谢

PS 我发现 CanvasGameCanvas 的基类)会保留所有这些事件,但我必须使用 GameCanvas

【问题讨论】:

  • [已解决]在您的 GameCanvas 构造函数中调用 super(false); 以不抑制关键事件 (link)。然后你可以像处理简单的 Canvas 对象一样处理关键事件

标签: java java-me midp lcdui


【解决方案1】:

检查 GameCanvas 构造函数的 javadoc。你应该用“false”来称呼它!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    相关资源
    最近更新 更多