我知道J2ME已经过时了,但是我必须为分配作业这样做。 当前,我正在使用GameCanvas类,并且我的游戏是一个线程,因此我的代码如下所示。

class Game extends GameCanvas implements Runnable {
    public GameCanvas() {
        super(false);
    }

    public void run() {
        while (true) {
            draw();
            flushGraphics();
        }
    }

    protected void keyPressed(int keyCode) {
        System.out.println("Hey, it actually worked.");
        // other code to handle key press...
    }
}

可悲的是,无论我的垃圾邮件在模拟器的数字键盘上受到多大的打击, keyPressed方法都不会被调用。 我知道GameCanvas拥有的getKeyStates()方法,但是我不想使用它,因为我不仅要捕获游戏键,还要捕获数字键1〜9。

有谁知道为什么我的代码不进入我的keyPressed()方法,我能做什么? 非常感谢。


不知道我哪里出了问题...但是在这里和那里进行了一些调整之后,它开始工作得很好。 非常感谢你们! :)

===============>>#1 票数:0

您在Game#run方法中等待很忙 ,这很可能导致设备忽略您的所有点击,从而使UI的响应速度变慢。

对于上述假设是否正确的简单测试,只需在循环中插入sleep ,如下所示:

    while (true) {
        draw();
        flushGraphics();
        try { Thread.sleep(100); } // sleep for 1/10 sec
        catch (InterruptedException ie) { System.out.println(ie); }
    }

如果上述方法有助于恢复UI响应能力,请重新设计应用程序以避免繁忙的等待-MIDP API提供了两种方法来实现。

===============>>#2 票数:0

GameCanvas的MIDP文档摘录(...)

如果开发人员仅需要使用getKeyStates方法查询键状态, 则在显示此GameCanvas时,可以抑制游戏键的常规键事件机制 如果应用程序不需要,则可以通过消除对keyPressed,keyRepeated和keyReleased方法的不必要的系统调用来抑制键事件,从而提高性能。

注意,只能针对已定义的游戏键(上,下,火等)抑制键事件。 始终为所有其他键生成键事件。

因此super(false)将取消GameCanvasCanvas关键事件侦听器方法。 在这种情况下,如果您仍想注册键事件,请在run()使用getKeyEvents(...) run()示例如下

 // Get the Graphics object for the off-screen buffer
 Graphics g = getGraphics();

 while (true) {
    // Check user input and update positions if necessary
    int keyState = getKeyStates();
    if ((keyState & LEFT_PRESSED) != 0) {
          sprite.move(-1, 0);
    }
    else if ((keyState & RIGHT_PRESSED) != 0) {
          sprite.move(1, 0);
    }

    // Clear the background to white
    g.setColor(0xFFFFFF);
    g.fillRect(0,0,getWidth(), getHeight());

    // Draw the Sprite
    sprite.paint(g);

    // Flush the off-screen buffer
    flushGraphics();
 }

  ask by matt translate from so

未解决问题?本站智能推荐:

1回复

Java ME在GameCanvas上绘制多个动态Sprite

我想在GameCanvas上绘制多个动态Sprite,例如枪声。 我有2个主要的类: GameCanvas和GameController GameController拥有我枪声的向量。 GameCanvas可以访问GameController的Sprite矢量,还可以使用ren
1回复

Java 2 ME GameCanvas - 如何接收所有keyPressed事件?

你好 我正在写简单的j2me计算器。 使用GameCanvas类作为我的界面的基础。 我需要处理numpad键事件和游戏相关事件(例如UP , DOWN , FIRE等)来移动我的光标。 问题是仿真器和我的索尼爱立信都没有收到一些小键盘和游戏相关的事件。 例如,我得到SOFT1, 发
1回复

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

好吧,我有一个问题,我无法通过多种方式解决并尝试过,但是没有成功。 我想按一个按钮,如果它一直按下,子弹不能发射。 所以我首先尝试了这个: 然后在主循环中调用此方法。 这可行,但是如果钥匙不放,子弹仍然会发出。 当我尝试覆盖keyPressed方法时,它不起作用,因为我不知道
1回复

J2ME按钮命令不起作用

我正在研究j2me应用程序,我很难处理命令按钮。 有人可以帮帮我吗。 按钮被假定为第二种形式,但是当我点击它时,它不起作用。 这是我的代码:
1回复

如何在Popup ChoiceGroup中设置元素-Java ME

我正在Java ME中开发一个短信应用程序。 它具有选择不同运营商的选项。 我实现了一个RMS,用于存储从POPUP ChoiceGroup中选择的用户名,密码和运营商名称。 我需要设置用户在下次登录时从rms先前选择的ChoiceGroup元素。 如果我在RMS中选择了索引
1回复

确定按钮不起作用

请查看以下代码。 在这里,“确定”按钮没有响应。
1回复

上下文相关菜单-Java ME

我正在尝试建立一个基于上下文的命令列表。 我为所有命令按钮设置了command.ITEM选项。 但是我找不到一种方法来提供以下功能: 我有一个值列表,说A,B,C对于A,我的命令菜单应包含2,4当我将选择(光标)移至B时,我的命令菜单应包含1,3当我移至C时,命令应包含再有2,1当我回
1回复

在J2ME中编码GIF

我在J2ME中有一个Image对象,我想把它带到GIF中。 我已经找到了JPEG和PNG编码器,但我想知道是否可以用GIF格式编码我的Image,返回它的字节数组。 我正在做这样的事情: ... 最后我有一个Image对象。 现在我想把它编码为GIF,如: 我
4回复

J2ME(Java) - 显示类中捕获的空指针异常

我目前正在使用Netbeans中的MIDlets(我使用的是Visual MIDlet),并且正在抛出NullPointerException,但我不知道为什么。 注意:只有在按下“确定命令”按钮时,程序在模拟器上运行时才会抛出异常。 这是我得到的错误 我删除了与异常无关的所
1回复

如何在j2me中监听改变textfield或textbox中的值?

我想存储从用户输入的每个字符。 当用户按下键时,该键应存储在任何变量中。 当用户按下其他键时,它必须用j2me中文本框中的新字符替换变量的值