|
|
主菜单通过不同大小的两种字体来显示选中和未选中的菜单项,用一个int型变量表示当前选中的菜单项,用一个String型的一维数组储存菜单项的内容,在keyPresseed方法中根据菜单选项变量menuIdx来相应的改变游戏的状态,从而使游戏跳转到相应的状态。需添加的源代码如下:
在MiningCanvas.java中添加如下代码
static final Font lowFont = Font.getFont (Font.FACE_MONOSPACE, Font.STYLE_PLAIN, Font.SIZE_SMALL);
static final Font highFont = Font.getFont (Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_MEDIUM);
//两种字体,分别是未选中和选中状态的字体
static final int lowColor = 0x000000FF;//未选中状态的颜色static final int highColor = 0x00FF0000;//选中状态的颜色static final int highBGColor = 0x00CCCCCC;//选中状态的背景颜色
static final int MAIN_NEW_GAME = 0;static final int MAIN_SETTINGS = 1;static final int MAIN_HELP = 2;static final int MAIN_ABOUT = 3;static final int MAIN_EXIT = 4;static final int MAIN_MENU_ITEM_COUNT = 5;static String[] mainMenu = new String[MAIN_MENU_ITEM_COUNT];
static int canvasW;//屏幕宽static int canvasH;//屏幕高static int startHeight;//菜单列表的起始高度static int spacing;//菜单项间宽度static int menuIdx;//当前选中的菜单项
public MiningCanvas(MiningMIDlet miningMIDlet){
...
menuIdx = 0;
canvasW=getWidth();canvasH=getHeight();
spacing = highFont.getHeight()/2;
startHeight = (canvasH-(lowFont.getHeight()*mainMenu.length)-(mainMenu.length-1)*spacing)/2;
mainMenu[0] = "New Game";
mainMenu[1] = "Settings";
mainMenu[2] = "Help";
mainMenu[3] = "About";
mainMenu[4] = "Exit";
}
private void paintMenuScreen(Graphics g){
for(int i=0;i < mainMenu.length;i++){
if(i==menuIdx){
g.setColor(highBGColor);
g.fillRect(0,startHeight+i*(lowFont.getHeight()+spacing)-(highFont.getHeight()
-lowFont.getHeight())/2,canvasW,highFont.getHeight());
g.setFont(highFont);
g.setColor(highColor);
g.drawString(mainMenu,(canvasW-highFont.stringWidth(mainMenu))/2,
startHeight+i*(lowFont.getHeight()+spacing)-(highFont.getHeight()-lowFont.getHeight())/2,
Graphics.TOP|Graphics.LEFT);
} else {
g.setFont(lowFont);
g.setColor(lowColor);
g.drawString(mainMenu,(canvasW - lowFont.stringWidth(mainMenu)) / 2,
startHeight + i*(lowFont.getHeight() + spacing),Graphics.TOP|Graphics.LEFT);
}
}
}
在keyPressed方法中的switch结构中添加
case GAMESTATE_MENU:
{
if (getGameAction(keyCode) == FullCanvas.UP && menuIdx - 1 >= 0) {
menuIdx--;
}
else if (getGameAction(keyCode) == FullCanvas.DOWN && menuIdx + 1 < mainMenu.length) {
menuIdx++;
}
else if (getGameAction(keyCode) == FullCanvas.FIRE) {
switch(menuIdx) {//选中后,按照选项值改变游戏状态值,跳转到相应的状态
case MAIN_NEW_GAME:
gamestate=GAMESTATE_GAMEING;
break;
case MAIN_SETTINGS:
gamestate=GAMESTATE_SETTING;
break;
case MAIN_HELP:
gamestate=GAMESTATE_HELP;
break;
case MAIN_about:
gamestate=GAMESTATE_ABOUT;
break;
case MAIN_EXIT:
miningMIDlet.destroyApp(false);
break;
}
}
break;
}
} |
|