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

区别

一个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    

时间: 2024-08-03 10:46:31

public int getKeyCode(int gameAction) 与 public int getGameAction(int keyCode)的区别的相关文章

c++的问题-c++中int是一个类么,c++中int是一个类么,取大神,取大神

问题描述 c++中int是一个类么,c++中int是一个类么,取大神,取大神 c++中int是一个类么,取大神,取大神,c++中int是一个类么,取大神,取大神,c++中int是一个类么,取大神,取大神 解决方案 int是基本类型,不是类.C++也不是完全面向对象的语言. 解决方案二: 不是-------- 解决方案三: 不是的哦,只是基本类型而已 解决方案四: int不是一个类.int是一种数据类型.数据类型就是固定内存大小的别名.int占四个字节.所以你定义一个int型变量,他占四个字节.

c++-为什么 1.999(共16个9) 转换成 int 是 2,1.9 转换成 int 是 1?

问题描述 为什么 1.999(共16个9) 转换成 int 是 2,1.9 转换成 int 是 1? <C++ Primer>第五版,中文版.p33. 1.999999999999999(比转换之后少是 2 的少个 9) 也是 1. 微软免费 IDE 2015.g++ 好像也一样. #include <iostream> using namespace std; int main() { double d = 1.9999999999999999; int i = d; cout

link中int i=1;和object o=1;还有int i = (int)o;有什么区别?

问题描述 link中int i=1;和object o=1;还有int i = (int)o;有什么区别? link中int i=1;和object o=1;还有int i = (int)o;有什么区别?o是整数么?int i=o可以么? 解决方案 编译器只认类型,而不管它是这个类型还是它的派生类型. 因此,object o是对象,而int i是整数.你会发现,对前者调用诸如CompareTo之类的方法是无效的. 解决方案二: 虽然不知道你说的是什么,但是难道没有编译器吗?试下不就知道能不能,我

在 C# 中,(int) ,Int32.Parse() 和 Convert.toInt32() 三种方法的区别

在 C# 中,(int),Int32.Parse() 和 Convert.toInt32() 三种方法有何区别?     int 关键字表示一种整型,是32位的,它的 .NET Framework 类型为 System.Int32.     (int)表示使用显式强制转换,是一种类型转换.当我们从 int 类型到 long.float.double 或decimal 类型,可以使用隐式转换,但是当我们从 long 类型到 int  类型转换就需要使用显式强制转换,否则会产生编译错误.     I

C#,int转成string,string转成int

1,int转成string用toString 或者Convert.toString()如下  例如:int varInt = 1; string varString = Convert.ToString(varInt); string varString2 = varInt.ToString(); 2,string转成int如果确定字符串中是可以转成数字的字符,可以用int.Parse(string s),该语句返回的是转换得到的int值;如果不能确定字符串是否可以转成数字,可以用int.Try

public volist-thinkphp index控制器发送到public下left页面,但页面跳转之后接收不到了。

问题描述 thinkphp index控制器发送到public下left页面,但页面跳转之后接收不到了. 用thinkphp方法做后台,后台中有left页面,是放在public文件夹中的,左侧分为"数据统计,用户分析,消息管理,反馈管理"等部分,每一个都是对应一个不同的控制器,并且每一部分还对应自己的子菜单,又对应各自的方法,现在的问题是,点击其中的某部分下的某子菜单,页面跳转,但是左侧部分就消失了,因为跳转到了其他控制器,而其它控制器的index方法中又不存在对数据表的遍历,所以显示

classic public ip to vpc和classicToVpc public ip不变

发布功能: 将公网IP管理交给VPC管理.方便IP扩大调度域和统一IP精细化管理

小议主子表INT自增主键插入记录的方法

插入    主子表最常见的大概就是用在进销存.MRP.ERP里面,比如一张销售订单,订单Order(ID,OrderDate),订单明细OrderDetail(OrderID, ProductID, Num,Price)这个大概就是最简单的主子表了,两个表通过ID与OrderID建立关联,这里主键ID是自增的INT类型,OrderID是表OrderDetail的外键.当然,键的选择方法很多,现在我们选择的是在sql里面最简单的方法.    对于这样的表结构,我们最常见的问题就是保存的时候怎样处理

JAVA中int与string互转的效率对比

今天突然心血来潮,想看看int与string互转的效率,所以试一下. 1.int转string对比 众所周知,int转string有三种方法: <pre name="code" class="html">* (1) String.valueOf(i) * (2) Integer.toString(i) * (3) i + "" 下面是对比: public class TestInt2String { public static voi