unJ2ME手机按键处理sb
[摘要] 由于手机控制游戏的按键实在有限,因此需要对有限的按键控制重新规划。而且不同的手机所支持的按键也会有所不同,例如只有数字键无方向键。
[关键字] J2ME 手机游戏 游戏按键
由于手机控制游戏的按键实在有限,因此需要对有限的按键控制重新规划。而且不同的手机所支持的按键也会有所不同,例如只有数字键无方向键。此时就必须通过数字键来进行游戏控制
,如示例6-2MIDP中定义了如下游戏执行按键:UP、DOWN、LEFT、 RIGHT、FIRE、GAME_A、GAME_B、GAME_C和GAME_D,相关应用说明如下:
l public static final int UP
游戏中执行向上动作。
l public static final int DOWN
游戏中执行向下动作。
l public static final int LEFT
游戏中执行向左动作。
l public static final int RIGHT
游戏中执行向右动作。
l public static final int FIRE
游戏中执行确认动作。
l public static final int GAME_A
游戏中自定义第一个执行动作按键。
l public static final int GAME_B
游戏中自定义第二个执行动作按键。
l public static final int GAME_C
游戏中自定义第三个执行动作按键。
l public static final int GAME_D
游戏中自定义第四个执行动作按键。
在应用时,需使用getGameAction(int keyCode)方法将按键码转换为游戏控制,而要游戏控制转换为按键码则使用getKeyCode(int gameAction)方法。游戏调用的应用方法如下:
l public int getGameAction
(int keyCode)
根据手机游戏设置的按键取得game action码。
l public int getKeyCode
(int gameAction)
根据手机游戏的game Action取得对应的按键代码。
示例6-2
/×
判断游戏按键句柄
×/
import javax.microedition.midlet.×;
import javax.microedition.lcdui.×;
public class keyAction2 extends MIDlet implements CommandListener
{
Display display;
//声明一个Form窗口
Form form;
Command okCommand;
Command exitCommand;
//声明一个游戏画板
canvasKey canvaskey;
public keyAction2( )
{
canvaskey=new canvasKey( );
display=Display.getDisplay(this);
//创建一个Form窗口
form=new Form("Form游戏按键控制");
okCommand = new Command("确认", Command.OK, 2);
exitCommand = new Command("离开", Command.EXIT, 2);
//新建Form的item项说明
form.append("测试游戏按键控制");
// Form中增加一个确认命令键
form.addCommand(okCommand);
// Form中增加一个离开命令键
form.addCommand(exitCommand);
//将命令加入Form
中
form.setCommandListener(this);
}
public void startApp()
{
display.setCurrent(form);
}
public void pauseApp(){}
public void destroyApp(boolean unconditional){}
public void commandAction(Command cmd, Displayable disp)
{
//判断命令控制状态
if (cmd == okCommand)
{
//点确定键后运行Canvas界面
display.setCurrent(canvaskey);
}
else if(cmd == exitCommand){
//运行离开命令
destroyApp(false);
notifyDestroyed();
}
}
class canvasKey extends Canvas
{
String keyname="";
int gameaction=0;
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 canvasKey()
{
try{
handImage=Image.createImage("/hand.png");
keyImage=Image.createImage("/key.png");
}catch(Exception ex){}
}
//运行按键状态
public void keyPressed(int keyCode)
{
//取得游戏按键名称
keyname=getKeyName(keyCode);
//取得游戏按键编码
gameaction=getGameAction(keyCode);
//重新绘制图面
repaint();
}
public void paint(Graphics g)
{
g.setColor(0xffffff);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(0);
g.drawString("游戏按键对照
", 40, 1, Graphics.LEFT Graphics.TOP);
g.drawString("按键名称为:"+keyname, 50, 13, Graphics.LEFT
Graphics.TOP);
g.drawString("游戏按键码:"+String.valueOf(gameaction), 50, 25,
Graphics.LEFT Graphics.TOP);
g.drawImage(keyImage, 15, 40,Graphics.LEFT Graphics.TOP);
for(int i=0; i
if(maxString[i].equals(keyname))
g.drawImage(handImage, maxisX[i], maxisY[i], Graphics.LEFT
Graphics.TOP);
}
}
}
运行结果如图6-4所示。
【说明】
从示例程序中显示的按键说明来看,方向键的按键编码与数字键的按键编码是相同的,只是名称不一样。在设计游戏按键时,可以使用数字键来代为控制方向,不过目前的手机大部分都包含方向按键和数字键。因此根据程序代码设计按键的原则,可以提供方向按键与数字键同时使用。