J2ME RPG游戏边学边做
|
|
Author: 一滴蔚蓝色 | Date: 2007-08-16 |
View: 7126 |
开发技术 - 程序设计 | Digg:
16
|
页面 3 共 6
J2ME RPG游戏边学边做(五)--游戏灵魂(计时器和奖惩与评价) gametimeoffset=System.currentTimeMillis(); 以后只要游戏不gameover就在每个更新周期都进行一次计算: gametime=(System.currentTimeMillis()-gametimeoffset)/1000; //转换为秒 下面要做的就是将它显示出来,还记得我们曾经实现的字体类了吗,这下子有用了,首先是实例化一个字体类: img=ImageTools.getImage("/pic/b_number.png"); fontbig=new Font(g,img,10,15, new char[]{'0','1','2','3','4','5','6','7','8','9'}); 然后就是显示: fontbig.drawString(String.valueOf(gametime),screenwidth/2-15,10); 还真是方便yeah! 接着是奖励系统,我们规定每过20s就加一个bomb给玩家。 int awardindex=(int)gametime/20;//计算奖励时间 if(awardindex>bombawardtop) awardindex=bombawardtop; if(bombaward[awardindex]!=0){//如果本20s没有奖励 bombnum+=bombaward[awardindex]; bombaward[awardindex]=0;//奖励过了 } 尽可能简单和给出些提示是我写本文的原则, 所以评价系统,很easy。 我们建立一个辅助类,提供一个方法,输入游戏时间,返回一个String评语。 public class StringTools { protected StringTools() { } public static String timeOpinion(long gametime){ if(gametime<10){ return "Do you play with your foot?"; //return "i can't belive,your are a game master"; }else if(gametime<16){ return "come boy, you can do it!"; }else if(gametime<20){ return "what a pity! try again."; }else if(gametime<25){ return "very well, you are a real man."; }else if(gametime<30){ return "i know you have talent of this game."; }else if(gametime<40){ return "i can't belive, your are a game master."; }else{ return "oh my god, are you a human?"; } } } 之后显示出来就好了,我手头没有合适大小的字体图片,我直接使用 g.drawString(StringTools.timeOpinion(gametime),5,22,g.LEFT|g.TOP); 想在手机小小的屏幕容下那么东西是挺费劲的,其实这也是我对手机上玩游戏没什么兴趣,不过我对手机网络应用冲满了信心 J2ME RPG游戏边学边做(六)--莱克兄弟的第一架飞机 plane=new GameObject(img,24,24); 在gameInit()中初始化状态,位置居中: plane.reset(); plane.moveto((screenwidth-plane.sprite.getWidth())/2, (screenheight-plane.sprite.getHeight())/2); 在gameMain中加入: plane.paint(g); 接下来,让飞机在控制下移动,主要是在gameMain中加入输入处理,如果飞机左移就更新画面到飞机左倾的画面,如果飞机右倾反之,没有输入的时候让飞机处于正常。 if (gameover) { }else{ if (keyevent) { if(key_up){ plane.move(0, -3); plane.sprite.setFrame(0); } if(key_down){ plane.move(0, 3); plane.sprite.setFrame(0); } if(key_left){ plane.move( -3, 0); plane.sprite.setFrame(1); } if(key_right){ plane.move(3, 0); plane.sprite.setFrame(2); } if(key_fire){ } } } else { plane.sprite.setFrame(0); } } 尽管很简单,但这是控制精灵移动的主要方式。可以想象一下,如果往左飞不是简单的一桢画面而是播放动画,该怎么实现呢?我们的GameObject功能有限,没有对spriite的动画序列进行增强,今后我们可以增强GameObject,使其支持多个动画序列,弥补spriite的不足。现在逐渐体会到一个好的游戏引擎是多么重要了吧…
2. 背景
|
||||||||
| 最近更新 ( 2008-04-12 ) | ||||||||
尚无评论发表