1、J2ME 2D小游戏入门之旅J2ME2D小游戏入门之旅(一)游戏的框架 录入者:admin |时间:2006-05-19 17:36:25 | 作者: | 来源: | 点击数:213 上一篇 下一篇favoyang 转载请联系作者响应站长mingjava的号召,我也和大家一起分享一下我的经验,希望大家指教。同时 欢迎各位高手的原创文章。前几天看到tony在csdn上发布自己的学习作品“是男人就坚持60s”,觉得创意虽然简单但是却很耐玩,是学习手机游戏制作的入门经典,于是一时兴起,clone了一下,图片依然使用的是tony的图片,纯粹学习之用。如果大家对这个游戏感兴趣可以与tony联系或访问他的
2、blog。从发展趋势上说midp2.0是趋势,最便宜的midp2.0手机如ot735i,已经1700元左右;而西门子一年前的高端机cx65,现在也只有2500左右;并且2500-3000这个价位的midp2.0手机有多种选择,西门子、se、N机都有。我个人挺喜欢cx65,如果将来手机制造商成本不断降低,相信1500元的midp将不是梦当然还要看应用是否丰富了。 言归正传,我们将使用midp 2.0 来开发我们的游戏,代号fly。开发工具jbulider。等文章全写完了,会提供src下载。目录:一、游戏的框架二、完善周边工具类(图象、GameObject、Font)三、控制飞机的移动四、加入子弹
3、群,实现碰撞运算五、实现爆炸效果、并加入道具导弹六、不足多多,你认为呢?七、源码一、游戏的框架我们的游戏需要一个通用的游戏框架,也方便以后的开发,但实现一个引擎是复杂的。作为初学者如果要你考虑太多的问题,恐怕会让你偏离主线,这里只给出canvas的代码,不理解可以参看本站的另外一篇系列文章使用MIDP2.0开发游戏。public class MyGameCanvas extends GameCanvasimplements Runnable, CommandListener private static MyGameCanvas instance; Graphics g; boolean ru
4、nning; Thread t; Command startcmd,exitcmd,restartcmd; int keystate; boolean keyevent; boolean key_up,key_down,key_left,key_right,key_fire; private boolean allowinput; public int screenwidth; public int screenheight; boolean gameover; /define your variable here /define your variable end protected MyG
5、ameCanvas() super(true); g=getGraphics(); running=false; t=null; addCommand(startcmd=new Command(start,Command.OK,1); addCommand(exitcmd=new Command(exit,Command.EXIT,1); setCommandListener(this); screenwidth=getWidth(); screenheight=getHeight(); /put your init once code here/put your init once code
6、 end synchronized public static MyGameCanvas getInstance() if (instance = null) instance = new MyGameCanvas(); System.out.println(new MyGameCanvas); return instance; public void run() System.out.println(MyGameCanvas run start); long st=0,et=0,diff=0; int rate=50;/16-17 frame per second while(running
7、) st=System.currentTimeMillis(); gameinput(); gameMain(); et=System.currentTimeMillis(); diff=et-st; if(diffspeed) animcount=0; sprite.nextFrame(); if(lifetime!=0 & +lifecountlifetime) alive=false; public void paint(Graphics g)/Paint if(!alive) return; sprite.paint(g); public void reset()/复位 alive=t
8、rue; lifecount=0; animcount=0; sprite.setFrame(0); 3.封装字体类,你需要漂亮的字体吗? 我们经常需要用图片来输出文字,一个方便的字体类是必须的。我们希望仅仅提供一个图片,一个图片所描述的字符的数组,来初始化一个字体类。字体类提供一个类似Textout的方法,方便得在一个位置输出信息。先封装一个简单的版本,只支持英文和数字,并且输出不能自动换行。可能你有一个简单的思路,就是简单的保存字符数组,当打印的时候遍历数组,来查找每个字符在sprite的frameseq中的index,但当我们打印一个字符串的时候就会发现,太多的遍历操作耽误了宝贵时间,这
9、里我们使用一个小技巧用容量换取速度,我们知道Character. hashCode()可以返回字符的ascii编码,常用字符将返回1-127;利用这一点,我们开辟一个128的数组charhash,将输入的字符c所在图片index存入charhashc. hashCode()中。以后也用这种映射方法来读取字符。charhash的元素初值为-1,以后只要数值大于0就是有效值。public class Font Sprite sprite; /Sprite int width,height; /每个char的尺寸 int charhash; /储存1-127个常见字符在sprite的frameseq
10、中的位置 Graphics g; public Font(Graphics g,Image img, int width, int height, char chars) this.g=g; sprite=new Sprite(img,width,height); this.width=width; this.height=height; charhash=new int128; for (int i = 0; i charhash.length; i+) charhash=-1;/没有代表此字符的图片 Character c; for (int i = 0; i =0) sprite.set
11、Frame(charhashhashcode); sprite.paint(g); public void drawString(String str, int x, int y) int length=str.length(); for (int i = 0; i length; i+) drawChar(str.charAt(i),x+width*i,y); 这样只要有一个实例font,就可以调用font.drawString(“hello”,0,0);在0,0位置输出漂亮的图片字符串。怎么样还挺好使的吧:)J2ME2D小游戏入门之旅(三)控制飞机移动 录入者:admin |时间:2006-05-19 17:36:32 | 作者: | 来源: | 点击数:168 上一篇 下一篇三、控制飞机的移动 实在是等不及了吧?加把劲,让我们加入游戏的主角飞机吧。你可以将这个游戏定位在动作游戏,一个动作游戏需要不断的从用户端获得输入,基本上不间断,所以plane需要不断的改变位置。那么这个基于桢的游戏应该定在多少桢合适呢?这需要在手机中测试,在模
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1