Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1503866
  • 博文数量: 3500
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 43870
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-03 20:31
文章分类

全部博文(3500)

文章存档

2008年(3500)

我的朋友

分类:

2008-05-04 20:33:03

一起学习

适合接收按键的事件在个人所定义的按键范围内,MIDP应用为每一个按键事件分配一个按键码。按键数值码对每个按键来说都是唯一的,MIDP定义的按键码值为:KEY_NUM0、KEY_NUM1、KEY_NUM2、KEY_NUM3、KEY_NUM4、 KEY_NUM5、KEY_NUM6、KEY_NUM7、KEY_NUM8、KEY_NUM9、KEY_STAR和KEY_POUND (这些按键数值依据ITU-T电话按键规范制定)。分别定义出0~9与“×”及“#”“……”等按键。
l public static final int KEY_NUM0
ITU-T key按键编码为48。
l public static final int KEY_NUM1
ITU-T key按键编码为49。
l public static final int KEY_NUM2
ITU-T key按键编码为50。
l public static final int KEY_NUM3
ITU-T key按键编码为51。
l public static final int KEY_NUM4
ITU-T key按键编码为52。
l public static final int KEY_NUM5
ITU-T key按键编码为53。
l public static final int KEY_NUM6
ITU-T key按键编码为54。
l public static final int KEY_NUM7
ITU-T key按键编码为55。
l public static final int KEY_NUM8
ITU-T key按键编码为56。
l public static final int KEY_NUM9
ITU-T key按键编码为57。
l public static final int KEY_START
ITU-T key的“star”(×),按键编码为42。
l public static final int KEY_POUND
ITU-T key的“pound”(#),按键编码为35。

请注意,ITU-T的按键控制只能运用在手机所有可见的数字按键上,并不能控制象第四章介绍的高级用户界面的软键盘,这两者必须要区分清楚。

明白如何调用手机按键后,接着就要说明如何控制按键。主要的控制方法在Canvas类中定义,各个方法调用根据ITU-T提供的按键码作为传入参数,示例6-1为手机界面提供动作,主要函数应用如下:
l public int getKeyName(int KeyCode)
取得单击按键的数字信息,也就是当玩家单击手机任何一个按键时,可由这个函数取得对应的按键数字。
l public protected void keyReleased
(int keyCode)
当释放按键时调用。调用getGameAction()方法能够判断游戏的动作,而且可以判断任意按键动作。KeyCode为ITU-T的按键码。
l public protected void keyPressed
(int keyCode)
当单击按键时调用。KeyCode为ITU-T的按键码。
l public protected void keyRepeated
(int keyCode)

当持续单击按键时调用。KeyCode为传入的ITU-T按键码,在按键过程中持续保持该参数值。本函数的应用要看手机是否提供此功能,并非所有手机都支持这项功能,所以提供另一个判断函数hasRepeatEvents来取得信息。
l public protected void
hasRepeatEvents()
判断是否支持持续按键动作。
示例6-1

ITU-T按键码程序测试
×/
import javax.microedition.midlet.×;
import javax.microedition.lcdui.×;
public class keyAction1 extends MIDlet implements CommandListener
{
Display display;
//声明一个List清单
List list;
Command okCommand;
//声明一个Canvas画板
canvasScreen canvasscreen;
public keyAction1()
{
canvasscreen=new canvasScreen();
//创建一个显示组件
display=Display.getDisplay(this);
//创建一个List清单,为IMPLICIT类型
list=new List("List按键控制", List.IMPLICIT);
//创建一个确认命令
okCommand = new Command("确认", Command.OK, 2);
//作为item选项加入List清单
list.append("ITU-T按键控制", null);
list.append("离开", null);
//将List清单加入到命令
list.addCommand(okCommand);
//运行将命令加入到List清单
list.setCommandListener(this);
}
public void startApp()
{
//显示清单List界面
display.setCurrent(list);
}
public void pauseApp(){}
public void destroyApp(boolean unconditional){}
public void commandAction(Command cmd, Displayable disp)
{
if (cmd == okCommand)
{
//判断清单软键盘运行的选项
switch(list.getSelectedIndex())
{
//选择第一项

case 0:
//运行画板显示
display.setCurrent(canvasscreen);
break;
//选择离开程序
case 1:
destroyApp(false);
notifyDestroyed();
break;
}
}
}

//运行画板程序应用
class canvasScreen extends Canvas
{
String checkKey="";
String checkkeyName="";
Image handImage;
Image keyImage;
String[ ] maxString={"UP", "SOFT1", "LEFT", "SELECT", "RIGHT", "SOFT2", "DOWN",
"SEND", "CLEAR", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"ASTERISK","0","POUND"
};
int[ ] maxisX={ 85, 40, 60, 85, 110, 130, 85, 30, 85, 35, 85, 135, 35, 85, 135, 35, 85, 135, 35, 85, 135
};
int[ ] maxisY={ 48, 55, 55, 55, 55, 55, 65, 70, 85, 95, 105, 95, 115, 125,115, 135, 145, 135, 155, 165, 155
};
public canvasScreen()
{
try{
handImage=Image.createImage("/hand.png");
keyImage=Image.createImage("/key.png");
}catch(Exception ex){}
}

//调用释放手机按键程序
public void keyReleased(int keyCode)
{
checkKey="release";
//判断释放按键所代表的ITU-T按键码
checkkeyName=getKeyName(keyCode);
//重新绘制Canvas的画板板面
repaint();
}

//调用单击手机按键程序
public void keyPressed(int keyCode)
{
checkKey="pound";
//判断单击按键所代表的ITU-T按键码
checkkeyName=getKeyName(keyCode);

//重新绘制Canvas的画板界面
repaint();
}
public void paint(Graphics g)
{
g.setColor(0xffffff);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(0);
g.drawString("Canvas类按键应用", 40, 5, Graphics.LEFT | Graphics. TOP);
g.drawString("按键状态:", 10, 20, Graphics.LEFT | Graphics.TOP);
//判断按键码并显示到画板上
if(checkKey.equals("release"))
g.drawString("释放的按键码为:" checkkeyName, 60, 20, Graphics. LEFT |
Graphics.TOP);
if(checkKey.equals("pound"))
g.drawString("单击的按键码为:" checkkeyName, 60, 20, Graphics. LEFT |
Graphics.TOP);
g.drawImage(keyImage, 15, 40,Graphics.LEFT | Graphics.TOP);

for(int i=0; i if(maxString[i].equals(checkkeyName))
g.drawImage(handImage, maxisX[i], maxisY[i], Graphics.LEFT | Graphics.TOP);
}
}
}

运行结果如图6-3所示。


图6-3

【说明】

从按键程序示例6-1中可以看到,当设计者单击手机键盘的按键时就会显示在画面中。同时也可以了解当前按键动作的状态。也可以明白如何设计游戏中的按键控制。

TAG: J2ME游戏

下载本文示例代码


J2ME手机游戏:按键事件J2ME手机游戏:按键事件J2ME手机游戏:按键事件J2ME手机游戏:按键事件J2ME手机游戏:按键事件J2ME手机游戏:按键事件J2ME手机游戏:按键事件J2ME手机游戏:按键事件J2ME手机游戏:按键事件J2ME手机游戏:按键事件J2ME手机游戏:按键事件J2ME手机游戏:按键事件
阅读(167) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~