51testing 2007-11-30 18:12
在J2ME中实现游戏功能选择界面
[size=2][font=宋体]在[/font][font=Times New Roman]J2ME[/font][font=宋体]游戏中,显示了欢迎界面以后,就应该显示游戏的功能选择界面,实现该界面的方式主要有两种:[/font][/size]
[size=2][font=Times New Roman]1、
[/font][font=宋体]使用高级用户界面中的[/font][font=Times New Roman]List[/font][font=宋体]来进行实现[/font][/size]
[size=2][font=Times New Roman]2、
[/font][font=宋体]使用[/font][font=Times New Roman]Canvas[/font][font=宋体]类来自己绘制一个功能选择界面[/font][/size]
[size=2][font=宋体]为了达到更强的游戏表现效果,经常在开发过程中使用第二种方式来实现游戏功能选择界面。下面是一种实现了使用[/font][font=Times New Roman]Canvas[/font][font=宋体]绘制功能选择界面的示例。[/font][/size]
[font=宋体][size=2]实现原理:在背景图片上绘制游戏的各个功能菜单,然后使用矩形框来代表用户选中的效果,并根据用户的选择实现选择框的上下移动,具体代码如下:[/size][/font]
[font=Times New Roman][size=2]package welcomecanvas;[/size][/font]
[font=Times New Roman][size=2]import javax.microedition.lcdui.*;[/size][/font]
[font=Times New Roman][size=2]public class MainCanvas extends Canvas {[/size][/font]
[font=Times New Roman][size=2]
Image image = null;[/size][/font]
[size=2][font=Times New Roman]
/**[/font][font=宋体]代表选中项目的索引号码[/font][font=Times New Roman]*/[/font][/size]
[font=Times New Roman][size=2]
int index = 1;[/size][/font]
[font=Times New Roman][size=2]
public MainCanvas() {[/size][/font]
[font=Times New Roman][size=2]
try{[/size][/font]
[font=Times New Roman][size=2]
image = Image.createImage("/res/menu.png");[/size][/font]
[font=Times New Roman][size=2]
}catch(Exception e){[/size][/font]
[font=Times New Roman][size=2]
}[/size][/font]
[font=Times New Roman][size=2]
}[/size][/font]
[font=Times New Roman][size=2]
protected void paint(Graphics g) {[/size][/font]
[size=2][font=Times New Roman]
//[/font][font=宋体]清屏[/font][/size]
[font=Times New Roman][size=2]
g.setColor(255,255,255);[/size][/font]
[font=Times New Roman][size=2]
g.fillRect(0,0,getWidth(),getHeight());[/size][/font]
[font=Times New Roman][size=2]
g.setColor(0,0,0);[/size][/font]
[size=2][font=Times New Roman]
//[/font][font=宋体]绘制图片[/font][/size]
[font=Times New Roman][size=2]
g.drawImage(image,0,0,Graphics.TOP | Graphics.LEFT);[/size][/font]
[size=2][font=Times New Roman]
//[/font][font=宋体]绘制矩形[/font][/size]
[font=Times New Roman][size=2]
g.drawRect(39,24 + (index - 1) * 30,100,27);[/size][/font]
[font=Times New Roman][size=2]
}[/size][/font]
[font=Times New Roman][size=2]
protected void keyPressed(int keyCode){[/size][/font]
[size=2][font=Times New Roman]
//[/font][font=宋体]按下的是数字键[/font][font=Times New Roman]2[/font][/size]
[font=Times New Roman][size=2]
if(keyCode == Canvas.KEY_NUM2){[/size][/font]
[size=2][font=Times New Roman]
//[/font][font=宋体]判断是否移动到第一个选项[/font][/size]
[font=Times New Roman][size=2]
if(index == 1){[/size][/font]
[font=Times New Roman][size=2]
index = 4;[/size][/font]
[font=Times New Roman][size=2]
}else{[/size][/font]
[font=Times New Roman][size=2]
index--;[/size][/font]
[font=Times New Roman][size=2]
}[/size][/font]
[font=Times New Roman][size=2]
}[/size][/font]
[size=2][font=Times New Roman]
//[/font][font=宋体]按下的是数字键[/font][font=Times New Roman]8[/font][/size]
[font=Times New Roman][size=2]
if(keyCode == Canvas.KEY_NUM8){[/size][/font]
[size=2][font=Times New Roman]
//[/font][font=宋体]判断是否移动到第四个选项[/font][/size]
[font=Times New Roman][size=2]
if(index == 4){[/size][/font]
[font=Times New Roman][size=2]
index = 1;[/size][/font]
[font=Times New Roman][size=2]
}else{[/size][/font]
[font=Times New Roman][size=2]
index++;[/size][/font]
[font=Times New Roman][size=2]
}[/size][/font]
[font=Times New Roman][size=2]
}[/size][/font]
[size=2][font=Times New Roman]
//[/font][font=宋体]重新绘制屏幕[/font][/size]
[font=Times New Roman][size=2]
repaint();[/size][/font]
[size=2][font=Times New Roman]
//[/font][font=宋体]如果按下数字键[/font][font=Times New Roman]5[/font][/size]
[font=Times New Roman][size=2]
if(keyCode == Canvas.KEY_NUM5){[/size][/font]
[size=2][font=Times New Roman]
//[/font][font=宋体]根据选择的不同显示不同的界面[/font][/size]
[font=Times New Roman][size=2]
switch(index){[/size][/font]
[font=Times New Roman][size=2]
case 1:[/size][/font]
[font=Times New Roman][size=2]
break;[/size][/font]
[font=Times New Roman][size=2]
case 2:[/size][/font]
[font=Times New Roman][size=2]
break;[/size][/font]
[font=Times New Roman][size=2]
case 3:[/size][/font]
[font=Times New Roman][size=2]
break;[/size][/font]
[font=Times New Roman][size=2]
case 4:[/size][/font]
[font=Times New Roman][size=2]
CanvasMIDlet.quitApp();[/size][/font]
[font=Times New Roman][size=2]
}[/size][/font]
[font=Times New Roman][size=2]
}[/size][/font]
[font=Times New Roman][size=2]
}[/size][/font]
[font=Times New Roman][size=2]}[/size][/font]