正文

可以运行的简单Canvas游戏菜单2006-08-10 15:30:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/sword2008/17464.html

分享到:

//by sword2008@程序之巢//网上的那些错误基本上改正import javax.microedition.midlet.MIDlet;import javax.microedition.lcdui.*; public class menucanvas extends MIDlet { public menucanvas(){}   public void startApp(){ Display.getDisplay(this).setCurrent(new Can());} public void pauseApp(){} public void destroyApp(boolean unkowmn){}   } class Can extends Canvas{//焦点 private int selected=0; private int preferwidth=-1; private int preferheight=-1; public static final int[] options = {0,1,2,3}; public static final String[] labels={"新游戏","设置","高分","退出"};  public Can(){ selected = options[0]; Font f=Font.getDefaultFont(); for(int i = 0;i<labels.length;i++){ int temp = f.stringWidth(labels[i]);//计算字符串的宽度 if(temp > preferwidth){ preferwidth = temp;                       } preferwidth = preferwidth + 2*16; preferheight = f.getHeight()+2*8;       }             }//paint 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);       }// 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);       }    }public void keyPressed(int keycode){//根据用户输入更新selected的值,并重新绘制屏幕 int action = this.getGameAction(keycode); switch(action){ case Canvas.FIRE: printlabel(selected); break; case Canvas.DOWN: selected = (selected+1)%4; break; case Canvas.UP:{ if(--selected < 0){  selected+=4;  } break; } default: break; } repaint(); serviceRepaints(); } //shownotify()在paint()之前被调用 public void shownotify(){//90 System.out.println("shownotify() is called");    } private void printlabel(int selected){ System.out.println(labels[selected]);          }             }  /* int action = getGameAction(keyCode);        其中,keyCode和游戏动作的对应关系如下:               Canvas.UP——数字键2和向上导航键               Canvas.DOWN——数字键8和向下导航键               Canvas.LEFT——数字键4和向左导航键               Canvas.RIGHT——数字键6和向右导航键               Canvas.FIRE——数字键5和确定导航键        Game_A、Game_B、Game_C、Game_D分别对应键盘上的1、3、7、9或者是7、9、*、#键。        经过上面的转换以后,代码实现就和手机键盘上的键值无关了。        另外,如果是Nokia系列的手机,还可以使用com.nokia.mid.ui.FullCanvas类里面的SOFTKEY1、SOFTKEY2来控制Nokia系列手机上的左右两个软键,做到这两个软键的处理通用。 */    

阅读(3864) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册