推荐文档列表

开发手机游戏心得

时间:2021-12-13 11:30:34 心得体会 我要投稿

开发手机游戏心得

上一次,我主要聊了一下当前手机游戏开发的平台选择和开发环境的安装,也具体的谈了谈开发J2ME程序的简

开发手机游戏心得

单入门方法。由于当前在手机上做游戏开发的大部分同志们用的都是J2ME,所以朋友们又催我继续深入谈一谈

J2ME的开发技巧。本人所学甚浅,许多地方也都只是触及皮毛,因此只能简单的谈谈我在手机游戏的开发中碰

到的一些问题和我个人采用的解决方案。另外我把平时在论坛里收集到的部分技巧提供给大家以作参考,这里

特别感谢那些无私奉献自己知识的人们。如果在文章中存在什么错误,还请各位老鸟海涵。希望我这篇文章能

起到一点抛砖引玉的作用吧。

开发技巧这个东西是颇不好谈的。还记得我最早学习J2ME的时候,曾经在SUN的网站上看到过一篇文章,题目是

《如何提高J2ME程序的效率》,作者口气强烈的要求j2me代码"寸土寸金",仿佛令我回忆起了当年在单片机上

的编程,其中有几个观点到现在还记得,比如不到万不得已不要创建新的类,限制使用接口数量,还有要缩短

变量或函数名称等等...我刚开始照着这个那个规范编程的时候,反而在许多地方束缚了自己,搞的这也不好做

,那也不好办。呵呵,这大概就是尽信书不如无书吧。所以,我在聊技巧的时候不会给大家设置很多条条框框

,只讲一下对某个问题通常的解决方法,希望能对大家有一点帮助。再次感谢那些在网上和论坛上给我提供过

帮助的朋友们。

游戏贴图

说起来千头万绪,不如就从最常用的贴图技巧开始说起吧。

MIDP手机程序的标准图片格式是PNG(便携式网络图片格式)。这里值得注意的是,不同的手机平台对于图片的要

求也满"挑食"的,同样是PNG格式却不一定适用于所有平台。我就碰到过这样的情况,利用WinXP自带画图板生

成的PNG格式图片,在WTK的标准模拟器上可以正常显示,到了西门子模拟器上却怎么也显示不出来。经过一番

折腾,我在Photoshop中重新生成了新的PNG格式图片后才顺利的显示出。网上的一些朋友也曾问我,为什么在

模拟器上运行正常的图片在真实设备上却无法显示。我也只能对他说多换几种生成图片的工具试试看喽。另外

,因为图片资源会占用较大空间,所以应该尽量保证其尺寸小,数量少。用不同的编辑工具存储PNG位图时,其

文件的大小会有很大的不同,你可以尝试多使用几种工具,选择其中存储最小的来使用。在这里我推荐一个工

具:Image Optimizer。它可以在不影响图象品质的前提下将图象减肥,最高可减少50%以上,真的很神奇呦J

要把图片加载到你的应用程序中,需要调用Image.createImage()这个函数,并且需要做相关的异常处理,所

以我一般会在MIDlet中定义一个工具函数,LoadImage()

具体代码如下:

//加载图片

       public Image LoadImage(String path)

       {

          try

          {

             return Image.createImage(path); //成功则返回图片对象

          }

          catch(Exception e)

          {

e.printStackTrace(); //不成功则打印错误信息并返回空值

return null;

          }

}  

如果有人问我,jar中什么是最占地方的?什么是最让你头疼的?我当然会毫不犹豫地说是图片,是PNG图片了

。但是一个好的游戏又怎能少得了那些精美的图片呢?一个经常使用的窍门是将许多的图片文件合并到一个图

片文件中来,这样可以在总体上减小将图片占用的空间。最有代表性的例子就是精灵动画了

在文件中载入这类大图像后,可以采用以下的方法来绘出动画的各个帧

g.setClip(x, y, FRAME_WIDTH, FRAME_HEIGHT);

g.drawImage(fiveMenImage, x - FRAME_WIDTH * frameNumber, y, Graphics.TOP | Graphics.LEFT);

    其中 x,y 为您绘图的起始坐标,FRAME_WIDTH和FRAME_HEIGHT为大图像的宽度和高度,frameNumber值由0

-7的循环。这样你就可以制造出一幅精灵正在行走的动画了。但要注意,如果还有其他的图片需要绘制,请重

置你的剪辑窗口。

    此外,当然是地图的绘制了

   

我们的大地图,通常是由许多的小块拼出来的,并会用一个数组来保存地图各个位置的地形和状态,然后统一

的在paint方法中刷出整张地图来。

实例代码如下:

HouseVector = new Vector();  //设置一个动态数组存放截下来的图片

Image ImageTemp = null;      //存放大图片

Graphics g1 = null;         

try

{

    ImageTemp = Image.createImage("/res/image/house.png"); //加载整张大图片

}

catch(Exception exception) { }

for(int i = 0; i < 3; i++)

{

      for(int j = 0; j < 4; j++)

      {

         Image image_element = Image.createImage(16, 16);//作为截图的小图片

      

[1] [2] [3] [4] 下一页

相关专题:[手机]