【发布时间】:2011-10-17 04:55:07
【问题描述】:
你好
我正在编写简单的 j2me 计算器。使用 GameCanvas 类作为我的界面的基础。我需要同时处理数字键盘按键事件和与游戏相关的事件(例如 UP、DOWN、FIRE 等)以移动光标。问题是模拟器和我的索尼爱立信都没有收到一些数字键盘和游戏相关的事件。例如,我得到 SOFT1、SEND、2、4、ASTERISK 键按下事件,但不接收 1、3、LEFT、RIGH、UP、DOWN、FIRE 事件。
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 我发现 Canvas(GameCanvas 的基类)会保留所有这些事件,但我必须使用 GameCanvas
【问题讨论】:
-
[已解决]在您的 GameCanvas 构造函数中调用
super(false);以不抑制关键事件 (link)。然后你可以像处理简单的 Canvas 对象一样处理关键事件