锁定老帖子 主题:第一次亲密接触J2ME游戏
精华帖 (0) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-09-10
之后就开始开发和修改一款麻将游戏,通过开发这个游戏,学到了很多游戏开发的方法和经验,体会到一个J2ME程序,想要在小小的手机上运行,优化工作是多么的重要。 1.开发J2ME游戏一个首要的条件就是,从一开始开发,就一定的有几款测试用真机,一款显然是不够的。而且测试用真机理论上应该找性能非常差的老旧机器(当然是曾经非常畅销的机型);屏幕分辨率相当重要,否则你在模拟器上跑的非常欢实的程序,放到真机上,那简直就是噩梦。 2.本次开发在一穷二白的空白基础上,竟然自己想到了开发无数多屏幕效果,例如小鸟飞,云彩飘动,字体垂直下落,字体递推向上,打字机效果等等,现在回想起来,其实这些效果都很好实现,下面是小鸟从屏幕右边水平飞到左边的部分代码: private void birdFly(Graphics g,int beiHeight) { birdCount++; int bottom = screenHeight - beiHeight - ban1Img.getHeight(); //换图片,bird1Img,bird2Img,bird3Img已经实例化过,最好是一张大图包含若干小鸟状态 Image birdImg = null; if (birdCount % 3 == 0) { birdImg = bird1Img; } else if (birdCount % 3 == 1) { birdImg = bird2Img; } else if (birdCount % 3 == 2) { birdImg = bird3Img; } //birdAppearX, birdAppearY等是成员变量,自己设置需要的初始值 birdAppearX -= 10; //如果右边到达了左边界 if( birdAppearX < 0){ birdAppearX=screenWidth-birdImg.getWidth(); birdAppearY = GameUtils.getRandomByRate(beiHeight + 5, bottom, bottom - gate1Img.getHeight()/2, "90%"); } g.drawImage(birdImg, birdAppearX, birdAppearY, 0); } 3.在J2ME游戏中切忌,千万不能使用多个Canvas类。本次开发一开始就是使用了好几个Canvas类,在Nokia N95上,每次切换到下一个Canvas,都会有白屏闪动一下,后来总算解决了这个问题,就是在开发中只使用一个真正的Canvas,其他的都仅仅是类和对象而已,构成实例后,放到Canvas中运行即可。 此方法对任何真机都可奏效,不会出现白屏,黑屏一闪而过的问题。 4.随机数的生成和使用。本次开发中,发现SUN的WTK中的CLDC1.0的jar包中竟然不支持nextInt(int n)这个方法,于是寻找了若干随机数生成方法。由于java程序生成的仅仅是伪随机数,因此在循环中生成随机数时,几乎所有的方法都有问题,今后仍然需要寻找一个真正好用的随机数算法。或者说,在程序里尽量少用随机数算法。 下面是我的一些随机数算法例程: public class GameUtils { private static long lRandomSeed = 0; private static Random random = new Random(); public static int nextInt(int limit){ random.setSeed(lRandomSeed++); int absVar = Math.abs(random.nextInt()); if (limit == 0){ limit = 1; } return (absVar % limit); } public static int nextInt(int limit){ return Math.abs(random.nextInt()) % limit + 1; } public static int nextInt(int n,long lseed) { if (n <= 0) throw new IllegalArgumentException("n must be positive"); //Random random = new Random(); random.setSeed(lseed); if ((n & -n) == n) // i.e., n is a power of 2 return Math.abs((int) ((n * (long) random.nextInt()) >> 31)); int bits, val; do { bits = random.nextInt(); val = bits % n; } while (bits - val + (n - 1) < 0); return Math.abs(val); } } 由于这是我第一次近距离接触J2ME游戏,文章里肯定有错误和不足的地方,请行家高手指正。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-09-16
j2me 没接触过,现在主要从事 j2ee
|
|
返回顶楼 | |
发表时间:2009-09-16
最后修改:2009-09-16
whaosoft 写道 j2me 没接触过,现在主要从事 j2ee
我也是,从事了7年J2EE了,由于公司要转型,所以开始研究手机客户端方面的东东。J2ME本身还是挺有意思的,但是想赚钱目前貌似很困难。 有一点没想到,俺这种老家伙竟然学习速度还相当令自己满意,看了3,4天j2me方面的东东,然后用20天就做了个各方面效果都相当炫的效果的游戏,自己比较得意,哈哈。 |
|
返回顶楼 | |
发表时间:2009-09-16
7年J2ee经验,也算老鸟了。。。
呵呵。必竟都是基于j2se基础的。一通百通嘛。。。学习起应该快些 |
|
返回顶楼 | |
发表时间:2009-09-16
偶是从j2me转型到j2ee的,呵呵。
|
|
返回顶楼 | |
发表时间:2009-09-17
偶之前是j2ee的,后来偶然间接触了j2me,学的很有兴致,唉,无奈现在又回到j2ee了,只是偶尔看看j2me的东西。
|
|
返回顶楼 | |
发表时间:2009-09-17
恕小弟献丑,我之做过一个手机游戏,但是我在那个游戏里从未奢侈过用int,觉得short足够了,如果short不够的,只能用long了,int实在不太有用
|
|
返回顶楼 | |
发表时间:2009-09-21
紫之皇 写道 恕小弟献丑,我之做过一个手机游戏,但是我在那个游戏里从未奢侈过用int,觉得short足够了,如果short不够的,只能用long了,int实在不太有用 说的很对啊,我开发时用了很多byte类型 |
|
返回顶楼 | |
发表时间:2009-10-20
我以前也是做jee的,现在想弄弄j2me。不知道怎么开头阿 ,各位赐教一下拉
|
|
返回顶楼 | |
发表时间:2009-10-20
shhbobby 写道 我以前也是做jee的,现在想弄弄j2me。不知道怎么开头阿 ,各位赐教一下拉 我当时学习,第一步,是先google了一些资料,找了一些常用类,看了一下API文档,把这几个常用类熟悉;第二步,从网上当了一些程序,阅读别人的代码,前后总共也就学习了4,5天时间。 然后自己就开始写程序了,写程序的过程中,对J2ME的了解在不断加深。 只开发了一个游戏,现在像什么双缓冲技术,浮点运算,伪随机数生成,MIDP2.0,MIDP2.1的区别,硬盘读写,局部刷新等等什么的,在开发过程中统统都明白了。 |
|
返回顶楼 | |