您所在的位置: 首页 > 移动开发 > j2me > 游戏开发 >

J2ME中使用Canvas制作简单的游戏菜单

j2me之家  作者:admin  2009-06-30 07:19  点击:   我要评论( )
  • 摘要:我们知道MIDP的图形用户界面分为两类,分别是高级图形用户界面和低级用户界面。一般来讲高级图形用户界面类使用起来比较方便,可移植性强,但是程序员对他的控制能力也很低,因
  • Tags: 制作 int 游戏 菜单 简单 使用
我们知道MIDP的图形用户界面分为两类,分别是高级图形用户界面和低级用户界面。一般来讲高级图形用户界面类使用起来比较方便,可移植性强,但是程序员对他的控制能力也很低,因为它们的界面表现是由底层控制的,而不是我们控制的。相比高级UI类,低级UI类则使用起来更难一些,但是控制能力更强,可以做出自己需要的界面。

Canvas和Graphics是我们必须熟练使用的两个类,分别代表了画布和画笔(事实上更丰富,姑且这么比喻)。而我们则是画画的人,而指导我们如何下笔的就是java doc了,再加上勤奋努力一定可以画出不错的界面。比如tabbed菜单,二级菜单等。这里我们讲述一个简单菜单的制作方式。

在画菜单的时候,需要考虑两面的问题,第一是计算相对位置,让菜单能够尽可能适应更多的机型,尽量少使用绝对值。例如画下面的菜单的时候

我们应该计算菜单的每个条目的高度,这些可以有Font的高度算出,当然你可以给条目留一些padding的距离。还应该计算条目的最宽值,毕竟每个条目的字数不一样。这样基本知道了整个菜单占的空间。最后还需要计算菜单在屏幕的位置。菜单的绘制如下所示:

public void paint(Graphics g){

//清除屏幕

int color = g.getColor();

g.setColor(0xFFFFFF);

g.fillRect(0,0,getWidth(),getHeight());

g.setColor(color);

//计算整个菜单的高度,宽度和(x,y)

int rectWidth = preferWidth;

int rectHeight = preferHeight * LABELS.length;

int x = (getWidth()-rectWidth)/2;

int y = (getHeight()-rectHeight)/2;

//画矩形

g.drawRect(x,y,rectWidth,rectHeight);

for(int i = 1;i<LABELS.length;i++){

g.drawLine(x,y+preferHeight*i,x+rectWidth,y+preferHeight*i);

}

//画菜单选项,并根据selected的值判断焦点

for(int j = 0;j<LABELS.length;j++){

if(selected == j){

g.setColor(0x6699cc);

g.fillRect(x+1,y+j*preferHeight+1,rectWidth-1,preferHeight-1);

g.setColor(color);

}

g.drawString(LABELS[j],x+8,y+j*preferHeight+4,Graphics.LEFT|Graphics.TOP);

}

}

第二个重要的问题是:焦点的切换,在高级UI类中,这是不需要我们处理的。但是使用Canvas制作菜单需要自己来处理焦点的移动,这里我们定义一个int类型变量selected,来记录焦点所在的菜单条目位置,也就是选择的索引。当用户按键的时候,我们在keyPressed()方法中判断用户的移动方向,对selected进行相关的加减运算,然后repaint()整个屏幕即可。

public void keyPressed(int keyCode){

//根据用户输入更新selected的值,并重新绘制屏幕

【编辑推荐】

  1. 俄罗斯方块游戏的设计和实现(MIDP)
  2. j2me游戏引擎程序结构
  3. J2ME游戏开发的高级优化技巧
  4. RPG游戏脚本的设计教程

各个手机平台对JSR规范支持大全 nokia 一部分
MIDP中尝试粒子系统
利用MIDP2.0开发游戏 (3) 添加背景和前景
J2ME开发手机游戏物理模型之抛物线
J2ME游戏开发技巧(2)
loading.. 评论加载中....

频道推荐

更多>>
  • 古堡惊魂-密室

  • 类型:冒险解谜
  • 十五世纪时,罗马尼亚中部特兰西瓦尼亚有一座古堡,名为拜恩古堡。据说,这里住着一位名叫德古拉的伯爵,所以..

推荐博文