wtk2.5.2模拟器 的左右软键键值为什么是0???

sdfiyuejin 2008-08-30 12:48:46
我不想用command 监听左右软键
可是wtk中,没有关于左右软键的键值 为什么啊?
有谁知道,哪个版本的wtk支持左右软键吗?要支持蓝牙的版本。。。
...全文
242 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdfiyuejin 2008-09-09
  • 打赏
  • 举报
回复
呵呵 谢谢大家...
bianmazi 2008-09-08
  • 打赏
  • 举报
回复
用keyPressed(int key);这份方法测试键值,肯定不会是0的.
  • 打赏
  • 举报
回复
兄弟..你应该搞清楚
什么是普通键值,什么是游戏动作键值
普通键值与游戏动作键值是多对一的关系
比如向上导航键值与数字键的键值可以对应到同一个向上的游戏动作键值
gameKeyCode = getGameAction(int keyCode)就是把普通健值映射为游戏动作键值滴
有些普通按键的键值没有对应的游戏动作按键,也就没有对应的游戏动作按键键值,返回就是一个0
左右导航键一般是没有对应的游戏动作按键滴
个人理解..
网络咖啡 2008-09-05
  • 打赏
  • 举报
回复
-6和-7,可以自己输出keyCode看的
sdfiyuejin 2008-09-04
  • 打赏
  • 举报
回复
我也找了一些,你说的按键缓冲 不是左右软键的问题.
不过还是感谢你回帖
sumer99 2008-09-02
  • 打赏
  • 举报
回复
这个是我参考别人的帖子,写得一个键值缓冲类,希望对你有所帮助
public class KeyPool {
//for key
private int mFrameKey;
private int mFramePressedKey;
private int mFrameReleaseKey;
private Canvas mCanvas;
//key mode: game_mode or input_mode
private boolean mIsGameMode;
//define final key vlaue
public static final int gk_UNDEFIND = 0;
public static final int gk_UP = 1;
public static final int gk_DOWN = 1 << 1;
public static final int gk_LEFT = 1 << 2;
public static final int gk_RIGHT = 1 << 3;
public static final int gk_FIRE = 1 << 4;
public static final int gk_GAME_A = 1 << 5;
public static final int gk_GAME_B = 1 << 6;
public static final int gk_GAME_C = 1 << 7;
public static final int gk_GAME_D = 1 << 8;
public static final int gk_POUND = 1 << 9;
public static final int gk_STAR = 1 << 10;
public static final int gk_NUM0 = 1 << 11;
public static final int gk_NUM1 = 1 << 12;
public static final int gk_NUM2 = 1 << 13;
public static final int gk_NUM3 = 1 << 14;
public static final int gk_NUM4 = 1 << 15;
public static final int gk_NUM5 = 1 << 16;
public static final int gk_NUM6 = 1 << 17;
public static final int gk_NUM7 = 1 << 18;
public static final int gk_NUM8 = 1 << 19;
public static final int gk_NUM9 = 1 << 20;

/**
* struct
* @param canvas
*/
public KeyPool(Canvas canvas) {
this.mCanvas = canvas;
this.mFrameKey = 0;
this.mFramePressedKey = 0;
this.mFrameReleaseKey = 0;
this.mIsGameMode = true;
}

/**
* get current mode
*
* @return isGameMode
*/
public boolean getMode() {
return mIsGameMode;
}

/**
* set current mode
*
* @param mode
*/
public void setMode(boolean mode) {
mIsGameMode = mode;
}

/**
* check key be pressed continue
*
* @param gameKey
* @return
*/
public boolean keyHold(int gameKey) {
return ((mFrameKey & gameKey) != 0);
}

/**
* check key be pressed
*
* @param gameKey
* @return
*/
public boolean keyDown(int gameKey) {
return ((mFramePressedKey & gameKey) != 0);
}

/**
* check key be released
*
* @param gameKey
* @return
*/
public boolean keyUp(int gameKey) {
return ((mFrameReleaseKey & gameKey) != 0);
}

/**
* get key value
*
* @param keyCode
* @return
*/
public int getKeyValue(int keyCode) {
int ret = gk_UNDEFIND;
int gameAction = 0;
if(mIsGameMode){
try {
gameAction = mCanvas.getGameAction(keyCode);
} catch (Exception e) {
return ret;
}
}else{
gameAction = keyCode;
}
switch (gameAction) {
case Canvas.UP:
ret = gk_UP;
break;
case Canvas.LEFT:
ret = gk_LEFT;
break;
case Canvas.RIGHT:
ret = gk_RIGHT;
break;
case Canvas.DOWN:
ret = gk_DOWN;
break;
case Canvas.FIRE:
ret = gk_FIRE;
break;
case Canvas.GAME_A:
ret = gk_GAME_A;
break;
case Canvas.GAME_B:
ret = gk_GAME_B;
break;
case Canvas.GAME_C:
ret = gk_GAME_C;
break;
case Canvas.GAME_D:
ret = gk_GAME_D;
break;
case Canvas.KEY_POUND:
ret = gk_POUND;
break;
case Canvas.KEY_STAR:
ret = gk_STAR;
break;
case Canvas.KEY_NUM0:
ret = gk_NUM0;
break;
case Canvas.KEY_NUM1:
ret = gk_NUM1;
break;
case Canvas.KEY_NUM2:
ret = gk_NUM2;
break;
case Canvas.KEY_NUM3:
ret = gk_NUM3;
break;
case Canvas.KEY_NUM4:
ret = gk_NUM4;
break;
case Canvas.KEY_NUM5:
ret = gk_NUM5;
break;
case Canvas.KEY_NUM6:
ret = gk_NUM6;
break;
case Canvas.KEY_NUM7:
ret = gk_NUM7;
break;
case Canvas.KEY_NUM8:
ret = gk_NUM8;
break;
case Canvas.KEY_NUM9:
ret = gk_NUM9;
break;
default:
ret = gk_UNDEFIND;
break;
}
return ret;
}

/**
* on key pressed
* @param keyCode
*/
public void onKeyPressed(int keyCode) {
int value = getKeyValue(keyCode);
// set key
mFrameKey |= value;
// set pressedKey
mFramePressedKey = 0;
mFramePressedKey |= value;
//System.out.println("value:"+value+"framePressedKey:"+framePressedKey);
}

/**
* on key released
* @param keyCode
*/
public void onKeyReleased(int keyCode) {
int value = getKeyValue(keyCode);
// reset key
mFrameKey ^= value;
// set releaseKey
mFrameReleaseKey = 0;
mFrameReleaseKey |= value;
}

}
sdfiyuejin 2008-09-02
  • 打赏
  • 举报
回复
按键松开不是这个方法.
都市巴巴 2008-08-31
  • 打赏
  • 举报
回复
不需要替换getGameAction
直接可以不用这个
贝壳鱼 2008-08-30
  • 打赏
  • 举报
回复
不知道你是怎么得到键值的。 代码?
sdfiyuejin 2008-08-30
  • 打赏
  • 举报
回复
各位 帮忙想想办法
分不够可以提。。。
JackZeng_sys 2008-08-30
  • 打赏
  • 举报
回复
不是0, 是你代码这个意思,按键松开就设置为0。
sdfiyuejin 2008-08-30
  • 打赏
  • 举报
回复
protected void keyPressed(int keys) {
System.out.println(keys);
keyCode = getGameAction(keys);
System.out.println(keys);
}
按左软键的话
输出为
-6
0
我一开始只有下面的输出语句,所以得的是0,因为Canvas类里面没定义具体的键值,所以好多键的值都是0
我现在想用其他的方法代替getGameAction(keys);

不知道现在 大家明白我的意思了吗?
都市巴巴 2008-08-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yinjiayy 的回复:]
keyPress(int keyCode)

低级界面中 这个可以吧
你是怎样得到键值为0的
[/Quote]


只是要注意这些方法都是继承Canvas下来de
都市巴巴 2008-08-30
  • 打赏
  • 举报
回复
可以用getKeyCode 得到到左右键值,还有上下左右键值,机型不一样,键值可能也不一样。。。

只有数字键和× # 键值差不多一样的。。,可以用Canvas.KEY_NUM9,为常量

Canvas没有直接得到左右键的常量,因为大多键值不一样

不晓得说清楚没
yinjiayy 2008-08-30
  • 打赏
  • 举报
回复
keyPress(int keyCode)

低级界面中 这个可以吧
你是怎样得到键值为0的
sdfiyuejin 2008-08-30
  • 打赏
  • 举报
回复
不好意思。。。
弄错了,我输出的是执行getGameAction方法后的值 因此全是0

现在换个问题:是不是需要自己定义个方法代替getGameAction它啊 ?怎么写?
网上有些方法 说是不论延迟都能保存键值,那我用那个方法,可以实现在特定时间内,即使获得键值也不做处理,并忽略掉它,在特定时间过后结束后,才对现在的按键处理吗?

还是那句话,分不是问题!

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧