`
wuhua
  • 浏览: 2114269 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

getKeyCode(int gameAction) 与getGameAction(int keyCode)的区别

    博客分类:
  • J2ME
阅读更多

http://www.3geye.net/bbs/frame.php?frameon=yes&referer=http%3A//www.3geye.net/bbs/viewthread.php%3Ftid%3D301

一个MIDlet应用程序通过调用Canvas方法来探测哪些键盘代码映射到运行的应用程序中的抽象游戏动作:

public static int getGameAction(int keyCode); 

  Canvas类定义抽象游戏动作集:UP、DOWN、LEFT、RIGHT、FIRE等等。

  游戏开发者应该知道MIDP 1.0规范中的一个问题。这个类定义了转化键盘代码到游戏动作的方法,同样也定义了转化游戏动作到键盘代码的方法。

public int getGameAction(int keyCode)
public int getKeyCode(int gameAction)

  方法getKeyCode(int gameAction)可能会导致一些问题,因为它只能返回基于游戏动作的一个键盘代码,即使MIDP 1.0允许超过一个键盘代码被实现。在Nokia手机中,个别的一些键盘代码被映射到相同的游戏动作,比如"UP键"和"2键"都被映射为向上的游戏动作。而这个方法只能返回其中之一;返回的值是特定的实现。然而,如果方法getGameAction(int KeyCode)使用"UP键"和"2键"的键盘代码作为参数,这个方法将返回正确的向上的游戏动作。下面来看一个不好的例子,以加深我们的印象:

//不好的例子,不要这么做:
class TetrisCanvas extends Canvas {
    int leftKey, rightKey, downKey, rotateKey;
    void init (){
        //FOLLOWING MUST NOT BE DONE
        leftKey = getKeyCode(LEFT);
        rightKey = getKeyCode(RIGHT);
        downKey = getKeyCode(DOWN);
        rotateKey = getKeyCode(FIRE);
    }


    public void keyPressed(int keyCode) {
        if (keyCode == leftKey) {
            moveBlockLeft();
        } else if (keyCode = rightKey) {
...
        }
    }
}
 

  下面是更好的解决方案:

class TetrisCanvas extends Canvas {
    void init (){
    }
    public void keyPressed(int keyCode) {
        int action = getGameAction(keyCode);
        switch (action){
            case Canvas.LEFT:
                moveBlockLeft();
                break;
            case Canvas.RIGHT:
                moveBlockRight();
                break;
        }
}
}
 


  这个例子是MIDP 1.0规范中的例子,使用getKeyCode ( int gameAction)处理键盘代码值,只能返回一个值。如果这样的话,其它可能的按键映射就不能在MIDlet中使用了。比如说,在Nokia 7650中就会出现问题,Nokia 7650有五个方向键和一个操纵杆以及普通的键盘布局,上面这个例子就会返回操纵杆的值而不是键盘的值。这是处理事件的一种与设备无关的方法,也是一种不好的方法。更好的解决方法是在keyPressed ()方法内使用getGameAction ( int KeyCode)。通常,应用程序应该避免使用getKeyCode ( int gameAction)方法并且总是使用getGameAction ( int KeyCode)。

                                                                                                      自:yesky.com   

 

分享到:
评论
2 楼 wuhua 2007-10-23  
哈哈。去问下sun
1 楼 redduke1202 2007-10-23  
不知道当初为什么要搞个getKeyCode方法出来,用起来又不通用

相关推荐

    Keycode对照表

    这篇博客文章“Keycode对照表”提供了一个详细的Keycode与键盘键位的对应关系,帮助开发者更好地理解和处理键盘事件。 Keycode是Android系统中用来表示物理按键的整数值。当用户在设备(如手机或平板电脑)上按下...

    j2me中文api(简陋版),自己翻译的,目前只翻译了常用的方法

    2. `getKeyCode(int gameAction)`:与`getGameAction()`相反,它将游戏操作常量转换回按键编码。 3. `getKeyName(int keyCode)`:返回对应于给定按键编码的键名,通常用于显示或日志记录。 4. `hasPointerEvents()`...

    J2ME中文API帮助文档

    2. `getKeyCode(int gameAction)`:将游戏动作转换回按键编码,方便识别具体按键。 3. `getKeyName(int keyCode)`:返回对应按键的名称,便于识别。 4. `hasPointerEvents()` 和 `hasPointerMotionEvents()`:用于...

    求keycode和keyascii

    例如,在JavaScript中,可以使用`event.keyCode`属性来获取当前按键的`keycode`,而在Java中,可以使用`KeyEvent`类的`getKeyCode()`方法来获取相同的信息。对于ASCII码,大多数编程语言都提供了转换函数,将`...

    MediaSession.rar

    } else if (event.getKeyCode() == KeyEvent.KEYCODE_MEDIA_PREVIOUS) { // 处理上一曲键按下 } break; } } } } } ``` 3. **设置Metadata和PlaybackState** 为了提供正确的反馈,你需要更新`MediaSession`...

    Android 两种方法实现长按返回健退出

    Android 长按返回健退出 背景 平常比较常见的都是一定时间间隔内按两次返回键来退出应用,并且第一次点击会有相应的提示,网上资料比较多,这里写一下,长按返回键... if (event.getKeyCode() == KeyEvent.KEYCODE_BA

    android下文件选择

    public boolean onKeyDown(int keyCode , KeyEvent event){ if(event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_BACK){ backProcess(); return true ; } ...

    Android屏蔽后退键的小例子

    代码如下:public boolean onKeyDown(int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_BACK) { return true;//消费掉后退键 } return...

    【纯JAVA语言做RPG游戏】3.地图碰撞检测和角色行走的实现

    int keyCode = e.getKeyCode(); // 根据keyCode更新角色位置 } // ... } ``` - 创建二维数组存储地图信息: ```java int[][] map = new int[MAP_WIDTH][MAP_HEIGHT]; // 初始化地图数据 ``` - 检测碰撞: ```...

    黑马程序员之android_点击返回键退出程序的方法

    public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { if ((System.currentTimeMillis() - exitTime) > 2000) { ...

    usb扫描枪数据获取解析

    int keyCode = event.getKeyCode(); if (keyCode ) { return false; } if (mScanGun.isMaybeScanning(keyCode, event)) { return true; } } return true; } @Override public void onCreate() { super...

    KeyCode 程序设计时方便快捷键的设置,适用新手

    - 在Java中,`KeyEvent`类提供了`getKeyCode()`方法,返回按下或释放的键对应的`KeyCode`值。 - 在JavaScript中,`event.keyCode`属性用于获取键盘事件中的键码。 - 在C#中,`Keys`枚举类型包含了所有键盘键的`...

    Android onKeyDown监听返回键无效的解决办法

    Android onKeyDown监听返回键无效的解决办法 当我们的Activity继承了TabActivity,在该类中重写onKeyDown是... if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN && e

    键盘码映射-GetKeyCode

    键盘码映射,图形界面。支持按键获取编码、以及根据编码查询按键。

    自动清空edittext.zip

    if (actionId == EditorInfo.IME_ACTION_DONE || event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { editText.setText(""); return true; } return false; }); ...

    EditText监听输入完成

    = null && event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { // 用户点击了“完成”键或者按下了回车键,认为输入完成 String inputText = editText.getText()....

    Android高级应用源码-自动清空edittext.zip

    = null && event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { editText.setText(""); return true; } return false; } }); ``` 这个“Android高级应用源码-...

    连连看源代码C语言版

    int GetKeyCode(); int FindPath(CELL *c1, CELL *c2); void DrawPath(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int color); ``` 这些函数分别实现了初始化游戏、游戏主循环、退出游戏、...

    Javascript下的keyCode键码值表

    总的来说,理解并掌握JavaScript中的`keyCode`对于编写与用户交互的动态网页至关重要。通过这个特性,开发者可以实现丰富的键盘控制功能,提高用户体验,并能更好地响应用户的输入行为。在开发过程中,记住这些键码...

Global site tag (gtag.js) - Google Analytics