j2me 中在GameCanvas 类中为什么调用NUM1,NUM2.....等等键,都不管用了,没反应啊!左右功能键调用也不行

只有在使用keyPressed 函数时,才能使用左右功能键调用,在keyPressed中左右功能键,分别是-6,-7.。。。。谁能告诉我,其他键对应的是数字:多少呀!;还有在GameCanvas中,我要是想使用数字键,1。2。3等等键,我要怎么调用呀。。。。求高手指点
我在GameCanvas中调用int key=this.getKeyStates();......然后调用key==GameCanvas.LEFT_PRESSED,按左键有效,但是调用key==GameCanvas.KEY_NUM7按数字7键,就没反应了,这是为什么呀!

左右软件用的是1.0的keyPressed

GameCanvas类中用这个。
int keyStates=getKeyStates();
//System.out.println("*********************当前按键值:"+keyStates);
不懂的时候用这个调试看看,你就知道了。跟1.0画布对应值不同了。

我比较绰,我是这样弄的。先转换要用到的1.0按键,再用keyPressed调用。
// 获取按键的值 @param keyCode @return
public int convertKey(int keyCode) {
System.out.println("7------获取按键的值"+keyCode);
if (keyCode >= Canvas.KEY_NUM0 && keyCode <= Canvas.KEY_NUM9
|| keyCode == Canvas.KEY_POUND || keyCode == Canvas.KEY_STAR
|| keyCode == LEFT_SOFT || keyCode == RIGHT_SOFT) {
return keyCode;// 获取按键的值,并返回该键值
} else {
return this.getGameAction(keyCode);
}
}
//
// 按下键盘触发的事件
protected void keyPressed(int keyCode) {
iActionKey = convertKey(keyCode); //变量头部自定义
switch (Game_State) {
case Game_log:

break;
case Game_menu:
//右软件响应
if((iActionKey&RIGHT_SOFT)!=0)
{
//返回
select=11; //变量头部自定义
}
break;
}
}
//其他按键的用2.0的这个
public void Input(){
int keyStates=getKeyStates();
if((keyStates&GameCanvas.FIRE_PRESSED)!=0)
Game_State=Game_menu;
}

//呵呵,实在有点绰。赶着做案例。还没整理好,你先看看。还有我的这个模拟器对应ABCD键是1379。都可以响应。
12/06 16:35
再给你补充点资料说明哈~~ 刚刚看到、、
GameCanvas :protected GameCanvas(Boolean suppressKeyEvents)构造方法,参数suppressKeyEvnets表示是否需要处理游戏键之外的其他按键事件。若此参数为False,那么按键事件处理方法keyPresses、keyRepeated、keyReleased在程序运行过程中不会被调用,这样可以提高速度和性能。
而我们做的是
public class MainCanvas extends GameCanvas implements Runnable{
public MainCanvas(){
super(true);
}
}
说到这明白了吗?
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-30
其实是这样的,每个手机的键值都有可能不一样。要看厂家是怎么设定的啦!
如果你想知道某个手机的按键值:
1.你没有这款手机,那你就到网上搜一下这款手机的键值,一般都是有的!
2.你有这款手机,那就好办了,写个小程序:第一步,定一个全局变量来保存按键按下的值(int currentKeyCode;),
第二步,在按键方法里(keyPressed(int keyCode)),进行赋值(currentKeyCode=keyCode;)
第三步,在绘制方法里绘制按键值(g.drawString(currentKeyCode,10,10,0);) 注:可以在之前设置一下颜色(g.setColor(0xff0000);).最后一定要repaint()哦!
第四步,打包放到手机上测试啦!你按的每个按键的值都会显示在手机屏幕上啦!
3.在模拟器上第二种方法也适用,不过模拟器的按键值都是可以自己设定的,不代表所有手机的按键值都是那种的,所以在移殖的时候要关注一下手机的按键值。
第2个回答  2011-11-30
把构造函数中的super()中的值改改试试,改为false或改为true,这个值是用来屏蔽按键的追问

改了,没用,你试试嘛!

j2me 中在GameCanvas 类中为什么调用NUM1,NUM2...等等键,都不管用了...
GameCanvas :protected GameCanvas(Boolean suppressKeyEvents)构造方法,参数suppressKeyEvnets表示是否需要处理游戏键之外的其他按键事件。若此参数为False,那么按键事件处理方法keyPresses、keyRepeated、keyReleased在程序运行过程中不会被调用,这样可以提高速度和性能。而我们做的是 public class MainCanvas ex...

请问j2me中gamecanvas键盘获取getKeyStates()只能判断上下左右,怎么...
按键:# 按键代码:KEY_POUND 按键代码的数值:35 gamescanvas中可以用keyPressed()方法,不过要调用getGameAction(keycode)方法来获得目前的键值对应的游戏动作。

求教J2ME问题?
Constant for the UP game action. 上键,通常是手机四方向键盘的上键。没有手机四方向键盘的通常没有这个键。以下是每个值的int值,比较的时候,既可以通过Canvas.UP\/Canvas.KEY_NUM9 形式进行判断,也可以直接通过对应的值进行判断,结果是一样的。public static final int DOWN 6 public static fi...

求J2me GameCanvas 上的 menu 代码
1.设计思想 估计你所说的menu往往是一组按钮,所以要一个类MenuList,一个个的按钮项为类MenuItem(它可以做为MenuList的一项使用,也可以单独使用:一个按钮,能提高类的内聚性)。2.具体代码(代码很简单,美工代码可以不看,set与get方法你也可以不看,除了这些没多少代码了)MenuItem public class...

J2ME编程中怎样用数字键控制精灵的上下左右运动
KEY_NUM2) { keyUp = true;} } protected void keyReleased(int keyCode) { int gameCode = this.getGameAction(keyCode);if (gameCode == Canvas.UP||keyCode==Canvas.KEY_NUM2) { keyUp = false;} 你看明白了吗 把返回的keyCode 值等于Canvas对应的键就可以了。

j2me使用update()和draw()来达到按键控制菜单,会循环多次,怎么来调整...
getKeyStates()是用来判断当前按键状态的,你程序中update被主线程重复调用,而按下一个键后,很可能在几次循环中都没有被放开,所以就执行了很多次了。你完全可以不需要update的,应该充分利用事件驱动的机制,重载如keyPressed这类事件响应方法来实现你的功能。同样的draw()也不需要,相关代码放到paint...

哪位能告诉我贪吃蛇游戏的全部代码?
J2ME的package snake;import java.util.*;import javax.microedition.lcdui.*;public class SnakeCanvas extends Canvas implements Runnable{ \/**存储贪吃蛇节点坐标,其中第二维下标为0的代表x坐标,第二维下标是1的代表y坐标*\/ int[][] snake = new int[200][2]; \/**已经使用的节点数量*\/ int snakeNum; \/...

跪求老鼠走迷宫游戏,必须用C++编写,用栈来实现,因为是数据结构课程设计...
wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName= NULL;wcex.lpszClassName= "canvas";wcex.hIconSm= NULL;return RegisterClassEx(&wcex);} \/\/***初始化 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow){ HBITMAP bmp;hInst = hInstance;hWnd = CreateWindow("canvas", "...

相似回答
大家正在搜