j2me游戏菜单代码

问题描述

看了一下这个代码有的地方看不明白哪位大侠给注释一下就是在每个函数写上是干什么的我来回的看逻辑混乱了--这只是一个菜单类midlet没发~还有如果要把菜单加上logo和背景图片怎么弄?importjava.util.Vector;importjavax.microedition.lcdui.Canvas;importjavax.microedition.lcdui.Font;importjavax.microedition.lcdui.Graphics;publicclassMenuCanvasextendsCanvas{privatefinalintLOGO=0;privatefinalintMENU=1;privatefinalintGAME=2;privatefinalintINFO=3;privatefinalintHELP=4;privatefinalintEXIT=5;//常量表示各个状态privateintzt;//状态变量privateintwidth,height;//屏幕宽和高privateFontft;//字体privateStringsmenu[]={"开始游戏","制作人员","游戏说明","退出游戏"};//菜单文字privateStringsinfo="作者:XXXn"+"";//介绍文字privateStringinfo[];//保存介绍文字privateStringshelp="2,8,4,9控制上,下,左,右,确定/5键确定";//帮助文字privateStringhelp[];//保存帮助文字privateintn,m;publicMenuCanvas(){width=getWidth();height=getHeight();ft=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_LARGE);switchZ(MENU);}publicvoidswitchZ(intzt){//改变状态时要做的事switch(zt){caseLOGO://我这里就不做LOGO了.break;caseMENU:break;caseGAME://游戏等菜单做完了再教你做游戏,一步步来break;caseINFO:info=format(sinfo,width,ft);break;caseHELP:help=format(shelp,width,ft);break;caseEXIT:m=0;break;}this.zt=zt;}protectedvoidpaint(Graphicsg){g.setClip(0,0,width,height);g.setColor(0x000000);g.fillRect(0,0,width,height);switch(zt){caseLOGO:break;caseMENU:drawmenu(g);break;caseINFO:drawinfo(g);break;caseHELP:drawhelp(g);break;caseEXIT:drawexit(g);break;}}privatevoiddrawexit(Graphicsg){g.setColor(0x00ff00);g.setFont(ft);g.drawString("你要退出吗",width/2,height/2-50,Graphics.HCENTER|Graphics.TOP);if(m==1){g.setColor(0xff0000);}else{g.setColor(0xffffff);}g.drawString("是",35,height-50,20);if(m==0){g.setColor(0xff0000);}else{g.setColor(0xffffff);}g.drawString("否",width-35,height-50,24);}privatevoiddrawhelp(Graphicsg){g.setColor(0xffffff);g.setFont(ft);for(inti=0;i<help.length;i++){g.drawString(help[i],0,i*ft.getHeight(),20);}}privatevoiddrawinfo(Graphicsg){g.setColor(0xffffff);g.setFont(ft);for(inti=0;i<info.length;i++){g.drawString(info[i],0,i*ft.getHeight(),20);}}publicvoiddrawmenu(Graphicsg){g.setColor(0x0000ff);g.setFont(ft);for(inti=0;i<smenu.length;i++){g.drawString(smenu[i],width/2,height/2+i*ft.getHeight()-50,Graphics.HCENTER|Graphics.TOP);}g.setColor(0xff0000);g.drawRect(width/2-50,height/2+n*ft.getHeight()-50,100,ft.getHeight());}publicString[]format(Stringtext,intmaxWidth,Fontft){//字符串切割,实现字符串自动换行String[]result=null;VectortempR=newVector();intlines=0;intlen=text.length();intindex0=0;intindex1=0;booleanwrap;while(true){intwidthes=0;wrap=false;for(index0=index1;index1<len;index1++){if(text.charAt(index1)=='n'){index1++;wrap=true;break;}widthes=ft.charWidth(text.charAt(index1))+widthes;if(widthes>maxWidth){break;}}lines++;if(wrap){tempR.addElement(text.substring(index0,index1-1));}else{tempR.addElement(text.substring(index0,index1));}if(index1>=len){break;}}result=newString[lines];tempR.copyInto(result);returnresult;}protectedvoidkeyPressed(intarg0){repaint();switch(this.getGameAction(arg0)){caseFIRE:switch(zt){caseMENU:switch(n){case0:System.out.println("游戏没写");break;case1:switchZ(INFO);break;case2:switchZ(HELP);break;case3:switchZ(EXIT);break;}break;caseINFO:switchZ(MENU);break;caseHELP:switchZ(MENU);break;caseEXIT:switch(m){case0:switchZ(MENU);break;case1:MenuMIDlet.inc.notifyDestroyed();break;}}break;caseUP:switch(zt){caseMENU:n--;if(n<0){//循环选择移动n=3;}break;}break;caseDOWN:switch(zt){caseMENU:n++;if(n>3){//循环选择n=0;}break;}break;caseLEFT:switch(zt){caseEXIT:m++;if(m>1){m=0;}break;}break;caseRIGHT:switch(zt){caseEXIT:m--;if(m<0){m=1;}break;}break;}}}

解决方案

解决方案二:
不是通用的控件
解决方案三:
楼上意思是?难到一般的java游戏不是这种模版吗?我好不容易找到的……谁有j2me游戏菜单模版分享一下谢谢
解决方案四:
从方法名就能看出它的功能呀,不是很复杂的
解决方案五:
找个通用控件吧。。
解决方案六:
楼上。。。。。。。什么是通用控件
解决方案七:
背景就是在绘制画布的时候加个图片就可以了先申明privateImagebackground;在构造函数中装载图片try{background=Image.createImage("/test.jpg");}catch(IOExceptione){System.err.println("Failedloadingimages!");}绘制过程中绘制出来publicvoidpaint(Graphicsg){g.drawImage(background,0,0,Graphics.TOP|Graphics.LEFT);背景就是任意图片,也可以而绘制各种单色。。看自己想象了吧至于LOGO没给MIDLET我也不知道加载哪了-。-貌似也可以像绘制背景一样绘制出来
解决方案八:
不是特别的尽量别用jpg格式图片它的色深有点浪费资源
解决方案九:
该回复于2010-08-31 17:32:14被版主删除
解决方案十:
该回复于2010-09-01 17:20:17被版主删除
解决方案十一:
啊~~~~~~~仰慕
解决方案十二:
这个代码麻烦,不通用,,只能算上一般。
解决方案十三:
他就是用了一个状态机么通过keypress调用switchZ改变状态然后再贴图的时候根据状态贴出不同的界面来
解决方案十四:
这是个MIDlet入口类的下一个类,你这个类里面包含了LOGO,MENU等等,不推荐这样写,把所有的功能都在一个这一个类里面会使这个类很累,负担重。实现LOGO:publicclassLogo{publicImageLogo[];publicImageisplay;publicSoundS;publicintstate=0;publicfinalintLogo_logo=0;publicfinalintLogo_isplay=1;publicfinalintLogo_end=2;publicintLogo_loop,Logo_time;publicLogo(){//Logo的构造函数S=newSound();Logo=newImage[3];try{for(inti=0;i<Logo.length;i++){Logo[i]=Image.createImage("/LOGO/"+i+".png");}isplay=Image.createImage("/LOGO/isplay.png");}catch(Exceptione){System.out.println("图片载LOGO类中加载错误");e.printStackTrace();}}publicvoidkeyPressed(intk){//处理Logo类的按键事件的方法switch(state){caseLogo_logo:break;caseLogo_isplay:if(k==-6){BM_S.Play("menu",true);BM_S.SetVolume(50);state=Logo_end;}elseif(k==-7){state=Logo_end;}break;}}publicvoidpaint(Graphicsg){//Logo类的绘画事件的方法switch(state){caseLogo_logo:g.setColor(255,255,255);g.fillRect(0,0,240,320);g.drawImage(Logo[Logo_loop],BoomMan_Date.WIDTH>>1,BoomMan_Date.HIGTH>>1,Graphics.HCENTER|Graphics.VCENTER);break;caseLogo_isplay:g.drawImage(isplay,0,0,0);break;}}publicvoidlogic(){//Logo类的逻辑事件的方法switch(state){caseLogo_logo:Logo_time++;if(Logo_time==1000/30){Logo_loop++;Logo_time=0;if(Logo_loop>2){state=Logo_isplay;}}break;}}}———————————————————————————————————————————————其实我个人认为把LOGO,MENU,GAME,HERO,NPC,MAP以及其他能用到的类都分开写为最好!
解决方案十五:

其他方案:
13L正解
其他方案:
同意13L的看法,但是一般写游戏的时候都是把主菜单以及LOGO的方法写在框架里的,没必要另外在写个类出来。游戏中的菜单在GAME类中写或者在框架中写都是可以的,方法可以互相调用。

时间: 2024-09-29 13:04:28

j2me游戏菜单代码的相关文章

State模式在J2ME游戏设计中的应用(需要源代码留下e-mail)

设计|源代码    游戏设计中的状态转换是一个既是非常重要又十分复杂的部分.我前几天做移植的时候看到一个public void keyPressed(int keyCode)中间竟然有着近2000千行的代码,这样的话冗长的代码不仅不符合OO的思更加严重的是会打扰我们的程序思路.这两天运用State模式做了一个J2ME游戏中的状态转换由于只是一个实验的例子所以只做了开始菜单和帮助的转换,在这个框架下再加入其他的状态实际就是十分的简单的了. 现在DEMO中只有两个状态,两种状态下keyPressed

J2ME游戏APIのGameCanvas游戏画布

GameCanvas是MIDP2.0的一个最主要元素,提高了J2ME游戏开发的方便性,相对于MIDP1.0,降低了J2ME游戏开发的难度跟成本,本文专门详述了GameCanvas游戏画布的有关内容,对GameCanvas有个大概的剖析. 一.GameCanvas中的主要方法.方法原型跟方法的作用如下总结: 1.方法GameCanvas,方法原型protected GameCanvas(boolean suppressKeyEvents),作用:构造方法,参数 suppressKeyEvents

j2me游戏引擎的基本构成

游戏引擎在国内还是有一批人走在前沿的,但出于种种的原因发展的并不是很好,并且引擎的神秘面纱和不可揣测的高难度使一些人还没有正式开始就已经打了退堂鼓.通常我们说游戏引擎的时候总是想到3D游戏引擎,的确游戏引擎发展到今天将它发挥到极致的正是3D引擎,但在3D引擎之前其实还是有很多2D,2.5D游戏引擎的,它们现在虽然看起来很弱,但却为3D引擎的产生提供了巨大的理论支持. 原理上讲引擎的结构真的很简单,并没有大多数人想的那么复杂.本篇文章不会讲更复杂的引擎,仅仅针对j2me来讲,但麻雀虽小五脏俱全,我

J2ME游戏开发技巧

不久前我曾用J2ME开发了一个MotoT720下的彩色游戏-宝石方块(GridOne).开发过程中积累了一些经验,现在写出来与大家分享. 使用双缓冲避免屏幕闪烁 双缓冲技术是编写J2ME游戏程序的关键技术之一.实际上,双缓冲技术是计算机动画的一项传统技术.造成屏幕闪烁的主要原因在于,画面在显示的同时,程序又在改变它,于是画面闪烁.解决办法就是在内存中开辟一片区域作为后台画面,程序对它更新,修改,完成后再显示它.这样被显示的图像永远是已经完全画好的图像,程序修改的将不是正在被显示的图像.当然还有其

[j2me]二级菜单演示 开源声明

郑昀@ultrapower 产品名称 产品版本 Keyword: JavaME 二级菜单 MenuBarlet 1.0.20  [J2ME]二级菜单演示 (MenuBarlet) 开源说明   我的资源: http://files.cnblogs.com/zhengyun_ustc/menubar-1.0.20-src.rar 这个1.0.20版本的j2me软件,能够在Nokia S60系列.索爱K700C和摩托罗拉Pebl U6手机上运行. 提请注意的是,由于本源代码思路来自于网友相助,并且引

JS打字效果的动态菜单代码分享_javascript技巧

这是一款基于javascript实现的打字效果的动态菜单特效代码,分享给大家学习学习. 运行效果图:----------------------查看效果----------------------- 小提示:浏览器中如果不能正常运行,可以尝试切换浏览模式. 为大家分享的JS打字效果的动态菜单代码如下 <html> <head> <title>JS打字效果的动态菜单</title> <meta http-equiv="imagetoolbar&

J2ME游戏卡的问题....

问题描述 做了一个J2ME游戏在MOTOV8和NOKIA6210上运行没问题移植到N70上就会卡游戏比较大500K左右V8测试虚拟内存好像是1M左右N70好像是512K游戏中的逻辑判断以及绘制的东西也挺多的想问下这游戏在N70上卡的原因到底是我逻辑和绘制问题呢还是JAR包太大? 解决方案 解决方案二:这个吗?我也不知道解决方案三:J2ME开发游戏的应该很少吧?用Java来开发的话,是出于平台考虑,而不是效率了解决方案四:是能不能运行问题解决方案五:不太清楚解决方案六:你描述的不是很清楚,但是卡的

纯CSS实现超简单的二级下拉导航菜单代码

本文实例讲述了纯CSS实现超简单的二级下拉导航菜单代码.分享给大家供大家参考.具体如下: 这是一款纯CSS菜单,二级下拉导航效果,是最简洁的CSS导航菜单,兼容性也很棒,IE7/8.火狐等都支持,而且它还是学习CSS菜单编写的典型教程,让你学会很多CSS技巧. 运行效果截图如下: 具体代码如下:   复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.

DIV+CSS实现的绿色水平一级菜单代码

 本文实例讲述了DIV+CSS实现的绿色水平一级菜单代码.分享给大家供大家参考.具体如下: 这是一款基于DIV+CSS实现的绿色水平网站菜单,相信是你喜欢的一种CSS菜单,绿色风格,用到了几张背景图片,大家顺着路径把图片下载下来吧.这款菜单整体感觉效果不错,兼容性又好,不管是用在你的网站或是学习研究CSS,都是不错的选择. 运行效果截图如下: 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"