`
izuoyan
  • 浏览: 9220188 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

作者:风过回廊 文章来源:http://www.sf.org.cn/

我是从读王森先生的书正式开始Java的手机游戏开发。《Java手机程序入门及应用》一书让我初窥门庭,而《Java深度历险》则给我留下了深刻的印象。所以说,对于王森先生的文章,我是不陌生的。

作为一个J2ME手机开发的铁杆鼓吹手,我一直都在不遗余力的向周围有志于移动应用领域开发的朋友们宣传MIDP并且推荐王先生的著作。J可想而知,当我拿到王先生的新作《Java手机_PDA程序设计入门》电子版时心中的欣喜和激动。可是当得知要为王先生的这部新著撰写书评的任务时,也同时感到了压力和不安。如果真的要让我来写这个东西,我很可能会把它写成一篇读书笔记或是读后感,如果让我给写好的这篇东西加个期望的话,我希望是能给更多的手机应用开发的朋友们带来一点帮助吧!

细细的读完了这本书,掩卷长思,的确受益匪浅。我把《Java手机程序入门及应用》比作一道java口味的清淡爽口小菜,那么<手机_PDA程序设计入门>>就是一道营养丰富,口味独特的嵌入式开发的盛馔。因为这本书不但囊括了J2ME开发的方方面面,还涉及了大量Personal Java,Symbian 和Pocket PC等嵌入式平台系统的开发知识和技术发展背景。这本书介绍了从J2ME技术发展,工具配置,相关应用开发包到数据库以及网络等等的知识和开发技巧,把握全局,事无巨糜,却被脉络清晰的组织的井井有条,赏之悦目。文章的特色不仅在于其布局严谨,行文流畅,也在于王先生将各种资料的出处采用列表的方式罗列清楚,这是其它的书籍所很少能够提供的。点击互联网上的URL链接,宛如念响了"芝麻开门"的咒语,一座座丰富的宝库便向我们打开了。J

全书总共分成以下几个大部分来介绍J2ME的知识:1.J2ME背景的介绍和开发的环境;

2.J2ME开发的基础知识,包括生命周期,开发工具的选择,高级用户接口API,低级用户接口API等;3.详细地介绍了J2ME开发的进阶,其中包括了Game API的开发知识,数据库的开发,通用的连接框架以及如何开发与企业系统的衔接等;4.概要的介绍了其他的各种不同的手机平台开发工具配置流程,包括Personel Java,Pocket PC以及Symbian等等。这本书涵盖的知识面非常的广。很多在《Java手机程序入门及应用》一书中不是太清楚的概念,在这里都作了澄清,我们可以更好地把它看作是一本进阶的教程。但是如果作为初学者,我建议还是应该先看看《Java手机程序入门及应用》,然后再看本书也许将会有更大的收获。

出于经验和所关注知识层面各方面的原因所限,我无法像通常的书评一样从市场,从全局,从大处来把握评价这本书。我只能依据自身的开发经验,平时在网上在论坛上与朋友所讨论开发中所存在的问题以及从我所关注本书的某些细节方面出发,来和大家一起来分享这道盛宴。我就从一个手机Java的程序员的角度坦率的说说这本书将能给我们带来的好处。J

1)关于此书,我以前在网上就浏览过它相关Game API章节的电子版。早就心向往之,今日终于可以一窥端倪。本书的知识结构都是相基于MIDP2.0规范的,这一点须请读者特别留心,在测试书中的实例的时候应该使用WTK2.0 或者 WTK 2.1工具,虽然当前有些扩充的API能够实现的手机不多,但是这是未来J2ME的发展方向,这也是作者立意深远之处。"工欲善其事,必先利其器",WTK本身就是一个很好的编译模拟打包的集成工具,但是相对于MIDP的不同版本,也给我们开发工作带来过很多困扰。笔者曾经在论坛上碰到过这样的例子:不少的朋友的编译打包后的jad,jar文件无法在手机上安装,原因就在于MIDP的版本问题。本书中说明了三种标准的开发版本,即MIDP1.0,JTWI,MIDP2.0,并且说明WTK2.1就能够开发兼容与三种不同规格的应用程序,还能视自己的需求调整环境。这样,我们可以通过统一的WTK2.1来开发我们的手机游戏了。

2)在国内系统而全面的介绍JCP标准化组织和JSR接口规范以及相关的J2ME发展背景的书籍资料不多,而本书的作者花费了很长的篇幅来介绍这一背景和发展方向。如同各种Sun所展现的Java技术,J2ME的每种相关的技术都经过由一定的步骤来制定,这个过程就是JCP。Expert Group遵循JCP所制定的准则来制定各种Java规范(JSR)。还有相关的参考实现(RI)和兼容测试包(TCK)。对JSR标准等相关的背景知识的详细了解可以更有助于我们更加清楚的把握J2ME发展的整体结构和方向。

3) 有很多的技术细节,也许都是我们时所忽略的。比如,在网上有不少的朋友都在问我,midlet小程序是否所能够访问外部文件的问题,在这里也能够找到了解答,在Midlet中只能存取来自同一个jar文件中所有非class的资源文件,当然,RMS也是资源的一种。这主要是从手机系统的安全角度来考虑的,包括图片,文本在内jar中所有的资源文件我们都可以通过 java.lang.Class.getResourceAsStream()函数来访问,这些也都是书中所提到的。

4)在Midlet的生命周期状态的流程分析中,有很多的细节也是我们平时也许并没有注意到的。比如说,在程序的生命周期中startApp()函数很可能不仅仅只被调用一次,而是每次从停止状态到启动状态的时候都会被调用,所以我们如果有些只需要初始化一次的代码就不要放在startApp()而是在构造函数中,并且尽量不要在startApp()做过多的初始化动作。以及它所抛出的异常的处理流程,这些都是值得注意的,这本书告诉我们,程序的许多效率的提高,其根源也许就在于这些林林总总的细节问题。

5)作为开发嵌入式应用系统软件,程序的运行效率是致命的关键。本书中的许多地方都着重的提及了这一点,并且举出了例子来帮助我们来改善这方面的问题。其中当然包括了许多经典的范例,包括循环问题的处理,在处理循环问题中需要将一些不必要的操作步骤移出循环体外,可以大大地增强程序的效率。还有在String与StringBuffer使用效率的比较的时候因为String作为一个包装好的类,在处理字符串的时候会多出很多的开销,相比之下简单的字符串处理可以完全的考虑StringBuffer类来进行。当然线程也是影响程序运行效率的一个关键性的要素,线程引入游戏开发的一个很重要的方面就在于屏幕在同时绘制一段动画的同时,界面仍然能够响应用户的录入,也就是用户的低级事件。同时,在用户界面层中,无论是高级的界面API,还是低级的界面API,线程的使用都扮演了很重要的角色,必须考虑到所有UI相关的回调函数都是由同一个Thread所完成的。我们在处理多线程的应用的时候,一定要考虑到线程的相关特性,小心谨慎。J

6)在论坛上有很多的开发者为这个问题所困扰,为什么一个游戏的动画程序在模拟器上表现正常但是却在某些设备上总是出问题呢?这是因为每当屏幕需要重绘的时候(有人调用repaint()或者是系统需要),就会在消息队列中塞入一个重绘事件,等到处理UI的线程有时间的时候,就会自动从队列中抓取事件,然后调用paint()回调函数。由于在处理UI线程处理前,很可能很多的重绘事件被塞入队列中,有些KVM为了做出最佳化,往往会将很多的paint()合而为一,同时减少paint()的调用次数。所以在运算资源紧张的时候,许多重绘的事件将会被丢弃,导致屏幕看起来像是跳格。这也正是许多人开发的手机游戏中的动画效果为什么明明在某些的模拟器和设备中表现良好,却在某些的设备中却频繁出现失真,定格以及滞后等问题的根源。解决的方法就是调用完repaint()方法后,紧接着就立刻调用serviceRepaints()来强制重绘,尤其是在某些动感要求极强的游戏中,但是serviceRepaints()会等到paint()完成以后才返回,所以对效能上有很大的影响,这是需要仔细斟酌的。这也是本书所特意提到解决方案。大概是"于细微处见精神" 吧,在书中的许多的细节之处,的确能够看到作者的治学严谨,匠心独运。

7)在本书关于游戏界面的控制的一些概念,移动的通讯设备的本身都是多种硬件加上多种操作系统的综合体,每家厂商均有各种特殊的用户界面,如果要保证MIDP应用程序的跨平台性,程序员需要多方面的考虑,比如按键在屏幕上的布局,根据我们所选择的类型就有不同的表现。本文详细的分析了MIDP系统的 midp2.0,并且加重了UI高级控件的界面布局,同时也增加了很多相关于调整界面布局的内容。例如,记得在论坛上也有朋友问过我为什么 g.drawstring("Hello",0,0,g.BOTTOM|g.HCENTER); 代码无效。其实(0,0)坐标为字符串或图形绘出在屏幕上时中下方的位置,如果使用了这样的函数调用,屏幕上将无法看到任何的东西了,因为都画到了屏幕之外。这些都是需要在阅读本书的时候细细的体会才能考虑得到。

8)本书关于一些高级的MIDP开发应用的介绍,包括Game API的开发,连接通用框架的使用,企业级应用的集成等,都是国内同等技术书籍中不多见的。本文在Game API的篇章中详细地介绍了组成Game API的各种重要的对象概念,并且给出了实际的标准范例,帮助读者更加深入地了解到了Game API的技术细节。

9)本书虽然在许多的方面细致入微的分析J2ME的方方面面,但是也有其疏漏之处,其中比较重要的就是在于中文字符的显示问题了。这也是在相关技术论坛上讨论的一个焦点问题。其中手机里面的字符串基本上都是采用的UTF-8的编码法,这种编码的格式介于ASCII和unicode编码法之间,经常碰到的中文问题主要分为以下几种:

1.rms数据库读写的问题;

2.在jad中书写游戏中文名称并且显示;

3.网络传输中中文问题(kxml传输的解码);

4.部分的模拟器也不支持中文(比如Nokia 60系列模拟器)。

解决第一个问题就是利用writeUTF() 和 readUTF()函数接口,他们提供了一个由从Unicode到UTF-8的相互转化的途径。第二个问题,建议还是自己手工用文本工具转化成UTF-8的编码写在上面,否则你用unicode码制写入中文的话,在模拟器或者实际设备上就有无法识别而导致程序不能执行的危险。第三个问题在于不同的手机其实支持的默认码制也是不一样的,CLDC的系统属性"microedition.encoding"定义了设备的默认字符编码,它的值可以使用System.getProperty方法取得。我们也可以转化成相关的支持的编码机制来实际的运行我们的程序。最后一个问题,主要都是集中在Nokia 60系列模拟器上,那真的没有办法了,要么只有等待他的中文版本出来了,要么可以考虑在文字的部分可以使用贴图在代替。

虽然我所关注的也许仅仅只是细节末枝,林林总总不入大雅之堂,但是我也希望能够管中窥豹,帮助大家能够一睹王先生在新著所带给我们的Java世界。总之,看完了这本书,使我更加期待下一部的进阶程序设计>,期待王森先生的新的大作!

分享到:
评论

相关推荐

    Android手掌抑制demo

    在Android开发领域,手掌抑制(Palm Rejection)是一项重要的技术,它允许用户在屏幕上进行手写输入的同时,即便手掌接触屏幕,系统也能正确识别并忽略手掌部分,确保手写内容的准确性。这个"Android手掌抑制demo"是...

    手掌图片数据集 ,可用于机器学习

    受试者将手其放置在距相机大约相同的距离处,以均匀的白色为背景,从手背侧和手掌侧拍摄每只手的图像采集而成的数据集。 数据集包括图片,以及图片相关联的元数据: (1)受试者ID; (2)性别; (3)年龄; (4)...

    palm 手掌检测的训练文件

    在手掌检测中,可能先用边缘检测方法,如Sobel、Canny或Hough变换,找出图像的边缘,然后通过区域生长来连接边缘像素,形成手掌的轮廓。这两种方法结合使用可以提高手掌的定位精度,减少背景干扰。 标签“palm ...

    手掌画 仙人掌教案.doc

    - 首先,调配适量的绿色水粉,避免水分过多,用适当的水粉笔将颜色涂抹在孩子的小手掌上。 - 然后,让孩子固定手掌,轻轻地印在纸上,形成仙人掌的“叶片”。 - 接着,连续拓印手掌,使仙人掌看起来密集且有序。 ...

    基于opencv3.1库的JAVA源码

    1-5 在Eclipse开发第一个Java程式 23 1-6 在Eclipse开发第一个Java视窗程式-显示影像 26 1-7 在Eclipse开发视窗程式-slider控制元件 34 1-8 在Eclipse开发视窗程式-按钮控制元件 39 1-9 好用的Eclipse热键 41 第2章 ...

    血管检测程序(手掌,手背)

    【血管检测程序(手掌,手背)】是一个利用MATLAB编程实现的生物识别技术,主要用于在手掌和手背的图像中提取血管特征。这项技术在医学、安全认证和生物识别领域有着广泛的应用,例如用于健康监测、无接触式身份验证...

    仿生机器人手臂手掌设计模型3D图纸SW2016格式附STEP和xt格式.zip

    仿生机器人手臂手掌设计模型3D图纸SW2016格式附STEP和xt格式的压缩包,揭示了现代科技在机器人领域的一个重要进展——仿生学的应用。此资源包含了一个详细的设计模型,专用于模拟人类手臂和手掌的功能,旨在创建一个...

    合金弹头之Java版(安卓项目)

    这意味着我们将会探讨如何用Java语言在Android平台上复刻或改编这款游戏。 【描述分析】 "合金弹头之Java版"的描述简洁明了,它进一步确认了这个项目是针对经典游戏“合金弹头”的Java实现,可能包括游戏的图形、...

    三年级第十一讲有趣的手掌画PPT课件.ppt

    三年级第十一讲有趣的手掌画,三年级第十一讲有趣的手掌画课件,三年级第十一讲有趣的手掌画PPT

    手掌与手套数据集(共包含300张左右高清图片)该数据集由使用手机捕获的人类手掌图像组成

    手掌与手套数据集(共包含300张左右高清图片)该数据集由使用手机捕获的人类手掌图像组成。这些图片是在现实场景中拍摄的,比如拿着东西或做简单的手势。数据集有各种各样的变化,如照明,距离等。它包括三个主要...

    Gesture_Recognizer:Java 中的手势识别器

    手势识别器Java 中的手势识别器这是 ReDollar( ) 的重新实现版本。 非常感谢和他的在线简单示例 OneDollar oneDollar = new OneDollar (); oneDollar . add( new Gesture ( " example " ) . add( new Point ( 1 , 1 ...

    基于摄像头检测手掌和拳头的功能.zip

    OpenCV是一个强大的库,包含了大量用于图像处理和计算机视觉的算法,适用于多种编程语言,包括Python、C++和Java等。在这个项目中,OpenCV可能被用来捕获摄像头的实时视频流,并对每一帧图像进行分析。 首先,为了...

    HTML5 3D手掌动画 看起来很抽象

    今天我们要来分享另外一款很酷的HTML5 3D动画,它是用一个个像素点构造的3D立体手掌动画,你可以拖动鼠标从不同的侧面观看这只非常抽象的手掌。另外,我再推荐一款HTML5 3D动画:HTML5 SVG 3D蝴蝶飞舞动画。

    手掌特效穴位图解.doc

    在应用手掌穴位图解时,我们需要了解手掌反射区和第二掌骨按摩法的理论和实践。我们需要了解每个穴位的位置和作用,并且需要了解如何通过按摩和刺激来改善人体的健康状态。 手掌穴位图解是一个非常重要的中医理论,...

    【JAVA】个人信息管理系统设计与实现源代码,基于B/S设计

    【JAVA】个人信息管理系统设计与实现源代码 基于B/S设计 在日常办公中有许多常用的个人数据,如朋友电话、邮件地址、日程安排、日常记事、文件上传和下载,这些都可以用一个个人信息管理系统进行管理。个人信息管理...

    复杂曲线拟合--手掌拟合.zip

    在“复杂曲线拟合--手掌拟合.zip”这个压缩包里,包含了实现这一目标的相关文件。 1. **MATLAB**:MATLAB(矩阵实验室)是一个集成环境,专为数值计算、符号计算、数据可视化和图像处理而设计。在这个项目中,...

Global site tag (gtag.js) - Google Analytics