本文是基于Nokia Series 60和Symbian OS技术,指导开发者在现在的Series 60移动电话终端上开发高级的移动游戏。
注意:本文档中讨论的技术路线都是以Symbian OS GT 6.1作为Series 60平台的基本操作系统。这适用于Series 60平台v1.x。Series 60平台v2.0基于Symbian OS GT 7.0s。本文档主要适用于Series 60 v1.x版,所以可能会有部分不兼容Series 60 v2.0版。
Symbian操作系统简介
Symbian操作系统是所有Symbian OS电话共享的应用编程接口( API)技术的公共核心。 这个核心被命名为"通用技术"(generic technology,简称为GT),它被分成不同的版本。 GT包括一个多任务核心、通讯、数据管理和图表中间件,低级图形用户界面框架和应用程序引擎。
象智能电话这样的小型手持设备,通常是资源非常紧张的设备。 这种设备的尺寸和制造费用限制了可用的存储器,处理速度和电池寿命。 尽管以上这些资源缺乏,但是这些设备还是需要能够稳定运行相当长的一段时间,甚至数个月。 一旦出现资源溢出的错误,对于系统来说重要的事情就是返回到前一个稳定的状态,而不失去任何重要的数据。 这使得完全地捕捉和处理每个运行错误对于系统和应用程序来说是非常重要的。
由于资源溢出而出现的错误,和所有的运行期错误一样被称为异常。 在标准的C++中,这些异常是使用try-catch-throw机制处理的,但是因为它造成了代码长度的负面影响,所以Symbian OS提供了它自己的称为trap harness的机制。
Symbian开发他们自己的异常处理程序的另一个原因是开发Symbian OS的时候,try - catch - throw机制还不是C++标准的一部分。trap- harness的概念是使用一个TRAP宏把可能引发异常的函数封装起来。这个宏可用于捕获多个函数,并且这些函数可以嵌套。万一出现一个异常,导致异常的函数的执行就会通过User::Leave函数终止,相当于标准的C++异常处理中的throw。这被称为一个leave(离开),它将返回程序执行到结束的TRAP宏,在那里相应的恢复动作可以被执行。
Symbian OS还提供一个工具,以便清除异常。一个cleanupstack被用于引用只被一个自动变量引用,并且如果出现一个leave的时候需要被释放的对象。TRAP宏将销毁cleanupstack中自动变量分配的内存。
Symbian OS提供一个用于在单一线程之内非抢先式多任务处理技术的系统。这个包括活动对象和活动调度程序的系统的设计目标是降低运行时间成本和解决与优先计划线程冲突的同步问题。Symbian OS中的每个应用程序由一个活动调度程序和一个或多个活动对象组成。这个调度程序封装一个需要异步的服务和依照它们的优先权安排活动对象的等待循环。活动对象封装实际的异步服务。
J2ME编程是Java在智能家电领域的应用,主要包含以下技术:
1、 高级用户界面
高级用户界面是指J2ME编程中用到的Form(窗体)、TextBox(文本框)、List(列表框)和Alert(提示信息框)等的使用,以及其中的一些控件的使用,当然也包括相应的事件处理。应用在一般的如登陆窗体、关于窗体和提示等。
2、 低级用户界面
低级用户界面指Canvas类和Graphics类等的使用,以及相应的事件处理,应用与游戏编程以及特殊界面的绘制等。
3、 记录存储系统
记录存储系统是手机中支持的用于数据永久保存的技术。因为手机中没有数据文件的概念,所以一般需要保存的数据只能以记录的形式保存。
4、 声音处理系统
MIDP1.0不支持声音处理,但是很多手机厂商如Nokia、Siemens等都支持,所以播放声音也是一项需要掌握的技术。该技术使用的API多和手机厂商相关。但是MIDP2.0就提供了通用的支持。
5、 网络编程
网络编程指在手机中通过GPRS或者CDMA网络以HTTP协议或者SOCKET的形式连接网络。现在的手机支持HTTP网络编程的占大多数,支持SOCKET的相对很少。所以网络编程暂时也就是使用HTTP协议进行编程。
6、 多线程
多线程是J2ME应用中比较核心的技术之一,因为进行网络编程和低级用户界面编程是为了响应迅速,都需要处理成多线程。所以也必须熟练掌握。
7、 短信息编程
很多手机都提供了用于发送短信息的API,如NOKIA、SIEMENS、SAMSUNG等,所以在J2ME中发送短信息也是一个比较常用的技术。
8、 其他
当然根据厂商的不同还提供了其他的一些技术,如Siemens的API中支持文件,Nokia的API支持读取系统通讯录等等。
[JAVA-CN转载]只针对Java2平台,而且是在国内可以找到的中文版的,其实书好不好是见仁见智的(高手可以去看Sun的开发文档,这也可以理解)--这只是一家之见而已,欢迎大家点评。
第一名:Java编程思想第二版(Thinking in java second)
包含范围:全部。
没说的,绝对的大师作品,当之无愧的第一。第一版时就享誉整个java界(当时网上好象也有人译了)。国内版是京京工作室翻译的,基本上毁了此书--错误术语太多。推荐高手看E文版,新手就不要先看此书了。第二版更精采,台湾的侯捷译了此书。可以到www.csdn.net看看前几章的中文版(不过是台湾术语)。希望国内会快些引入此书,你也可到http://www.BruceEckel.com--作者的主页免费下载此书推荐http://www.bdelmee.easynet.be/java/index.html。有chm格式的,非常棒!BTW:这位大师最近在写Thinking in Python相信又是一本经典名著:)
第二名:Java2编程详解(special edition java2)
包含范围:全部
这本书会排在core java2的前面可能很多人会不同意,但是就中译本和内容来看非常全面。适合新手成为高手。虽然国内的价位高了些(150),但基本还是值得的。该有的内容都有了,做参考书也很不错。BTW,这个系列中的oracle8/8i使用手册也是一本很经典的书,同样推荐。
第三名:Java2核心技术卷一,二(core java2 volume1,2)
包含范围:全部
这两本我把它们看成一本不会有人有异议吧。这也是Sun的官方的书,我觉得相对来说。第二卷高级特性要比第一卷基础知识好(第一卷又是京京工作室译的--真影响情绪:()。内容同样很全面,但是卷一虽说是基础知识,同样对新手来说不是很合适。感觉条理性不强,而且内容有些混杂,但第二卷完全可以弥补这些--精辟而细致,很适合有一定基础的Java程序员看。
第四名:Java 2图形设计 卷1:AWT 卷2:Swing-Graphic Java 1.2 Mastering the JFC Volume I:AWT SWING 3rd Edition
包含范围:Java图形设计
没什么说的了,尽管图形设计不如J2EE那么火 ,而且Win32下做应用程序也不是java的强项,但是AWT和Swing仍然是Java程序员的必修课。看这两本就够了,看看厚度就知道了,而且这也是Sun官方出的图书。
第五名:J2EE构建企业系统专家级解决方案
包含范围:J2ee
清华大学出版社 译作者:[美]Paul J. Perrone,et al.著 张志伟等译
又是一本极厚的书1038页,105元。不过内容十分丰富,适合想对J2EE整体做了解的程序员,至于每项都想精就不太可能了,呵呵。毕竟在Java中思想是主要的。在这类中有本Java服务器高级编程也很不错,机工华章出的-wrox系列中的。
第六名: Java XML编程指南
电子工业出版社 译作者: [美]Tom Myers,Alexander Nakhimovsky著
包含范围:Java+XML
XML在Java中的地位也越来越重要了,而国内能看到的还有一本中国电力出的o eilly的Java和XML。最后我还是选了这本wrox的,当然你要是想好好学学XML本身,还是看看那本XML高级编程吧。wrox系列中的-机工华章出的。
第七名:书名:Jini核心技术 英文原书名: Core Jini
作者: W.Keith Edwards
包含范围:Jini
Jini也是Java体系中很重要的部分,而且更重要的是这本可能是国内唯一的一本Jini专著-翻译的也不错。在我看来是当之无愧的经典,同样是Sun的官方图书,内容很清晰透彻。
第八名:Enterprise JavaBeans第二版 英文原书名: Enterprise JAVABEANS
作者: (美)Richard Monson-Haefel
包含范围:EJB
O‘reilly出的,ejb的重要性我不用多说了吧。尽管有人说这本译的不好,但是同样它是国内目前唯一的EJB专著。o eilly的书就是只讲一方面或一项技术,很细,但价格也不菲,这本书的架构还可以,值得一看。
第九名:数据结构与算法分析(Java版)
译作者: [美]Clifford A.Shaffer著 张铭 刘晓丹译
包含范围:Java算法
尽管基本上Java图书都是讲Java本身的特性。因为Java的体系太庞大了,而用Java来实现的数据结构与算法,这本书也是唯一一本,所以尽管这本不是那么的好但还是做以推荐。
第十名:软件工程Java语言实现 英文原书名: Software Engineering with Java
作者: Stephen R.Schach 译者: 袁兆山等
这本书没什么多说的,纯理论性的东西,但软件工程的重要也是有目共睹的,而且同样是这个领域中唯一的一本Java书。
http://scjp.home.sohu.com/ 模拟试题
http://scjp.myrice.com
http://java.sun.com/products/jsp/faq.html
http://www.sun.com.cn/education
http://java.sun.com
http://java.sun.com/j2se/1.4/docs/api/index.html java官方网站的帮助
http://java.sun.com/j2se/1.4/docs/
http://java.sun.com/j2se/1.4/download.html#docs 可下载版本
http://java.sun.com/docs/windows_format.html winhelp格式的
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html 这个是CodingConvension,就是编码规则。写Java代码,这个是最基本的,必看的资料。
http://61.140.76.55:8080/index.html 木棉数字校园网
http://www.cnkapok.com/course/c_bea3.html weblogic认证
http://www.bea.com.cn/channel/education/index.html
http://www.servlets.com/docs/index.html
http://my-wjl.scu.edu.cn/~xxuzi/ 极品SCJP
http://my-wjl.scu.edu.cn/~xxuzi/
http://jdeveloper.myrice.com/
http://www.servlets.com/cos/index.html Java的上传Bean
http://www.sawin.com.cn/dragon/manual/manualindex.htm
http://61.144.28.245/hjc/web/doc/servlet-jsp/servlet-jsp4.html
www.sybex.com
www.mcp.com
www.bbook.net
www.bjbb.com
www.medias.com.cn
www.phei.com.cn
http://www.justjavajobs.com/jjavj.nsf/autoj/
http://www.psclearn.com/
edge-china.com
http://www.commission-junction.com/track/track.dll?AID=55509&PID=499008&URL=http%3A%2F%2Fwww%2Ejobsleuth%2Ecom%2Fregister%2Ecfm%3F%26ref%3D2261
http://suned.sun.com/USA/certification/java_news_faq.html
http://suned.sun.com/USA/certification/progobj.html
http://suned.sun.com/usa/cert_test.html
http://www.java-cn.net/
http://dboy520.51.net/cgi-bin/javajia/
http://www.javalobby.org/
http://www.uni-koeln.de/themen/java/
http://www.javacats.com/US/articles/MultiThreading.html
http://www.rstcorp.com/javasecurity/links.html
http://www.playjavagames.com
http://physicsweb.org/TIPTOP/VLAB/
http://www.eastjava.com/
http://rigauxf.waika9.com/
http://ww4.chatweb.net/javachat/
http://www.ajug.org/
http://www.mste.uiuc.edu/java/
http://www.acm.org/crossroads/xrds4-2/serial.html
http://abc-java.com/
http://www.chatattack.net/
http://jazz.external.hp.com/src/java/
http://www.jerenajava.com/
http://www.central-java.com
http://www.acm.org/sigs/sigada/education/pages/ada_java.html
http://www.hoskinson.net/java/
http://java.areco.cz
http://www.javamud.org/
http://www.java.online.tr.tc/
http://www.engapplets.vt.edu/
国外:
http://sourceforge.net/projects/jfreechart/
http://www.titan-books.net/
http://www.jiveforum.com
http://www.theserverside.com
http://www.jdance.com
http://foundries.sourceforge.net/java
http://edocs.beasys.com/index.html
http://www.hostj2ee.com
http://www.hostjsp.com
http://www.onjava.com
http://ejbinfo.com
http://www.mgm-edv.de/ejbsig/ejbsig.html
http://www.uml-zone.com
http://www.jguru.com
http://www.ibm.com/developerworks
http://www.ibm.com/deveoperworks/cn ibm新推出一个websphere园地,内容也是很不错的。
国内:
http://www.javaunion.com
http://www.javaunion.org
http://www.javaunion.net
http://www.huihoo.com
http://www.javadigest.net
http://drivejava.www2.cn4e.com
http://www.umlchina.com
http://www.drivejava.com
http://www.javaunion.org/ 中国Java阵线联盟
http://www.javaunion.com Java阵线联盟(Java认证学习资料)
http://www.chinajavaworld.com/ Java开发者(XML教程,模考试题1)
http://javalovers.myetang.com Java爱好者
http://www.cn-java.com 中文Java技术网站
http://www.cnjavaclub.com/ 中国Java俱乐部
http://www.52jsp.com/index.jsp 52JSP
http://www.cnjsp.com/ 中国JSP网站
http://www.jsp001.com/ JSP001
http://www.china-jsp.net/ JSP新升代/也有ASP
http://www.javaxforum.com javaxforum开发指南,SCJP认证资源
http://www.pconline.com.cn/pcedu/empolder/wz/jsp/index.html pconline的一些教程
http://adionline.myrice.com/ 阿迪在线
http://216.239.33.100/search?q=cache:UiFo_1XVUN8C:members.aol.com/mnsjava/referate/AWTReferat/syntax.html+MenuShortcur&hl=zh-CN //常用Java界面控件方法说明
http://www.thejmaker.com/ Java控件
http://www.jpowered.com/ Java控件
http://www.javareport.com
http://www.javaworld.com
http://www.jiveforum.com/
http://www.theserverside.com/home/index.jsp
http://www.gcsuncenter.com/eforum.nsf/eForumFrameset?OpenFrameSet
http://www.esperanto.org.nz/jsp/jspfaq.html
http://www.zdnet.com/pcweek/stories/news/0,4153,410709,00.html
http://developer.netscape.com/viewsource/kuslich_jsp/kuslich_jsp.html
http://web2.java.sun.com/products/jsp/jsp-asp.html
开始http://developer.java.sun.com/
学java怎能不去sun公司的站点?
http://www.chinajavaworld.com/
站长的网站~~hoho~hoho~~
http://www.5xsoft.com/index.html
http://www.mcsebraindumps.com/
http://www.mcsdunion.com/
http://www.helpwork.net/东西比较老
http://www.china-pub.com/computers/ebooknew/main.asp免费前三章
http://www.crackbest.com/工具解密、破解
http://www.nopayweb.com/computerbook/index.shtml英文
http://ebook.it-pc.com/
http://www.pediy.com/
http://www.tldp.org/LDP/lpg/node1.html
http://www.books24x7.com/home.asp
http://www.bestdown.com/
http://www.programfan.com/编程爱好者
http://automation.seu.edu.cn/auto/java/java_resource.htm
里面有Thinking in java 第一版(中文)、第二版(英文)以及很全的scjp认证资料 (最近可能有点问题)
http://person.longcity.net/home1/wenchund/index.htm
有JB5、JB6的破解码以及为数不多的java电子书籍 (也有问题)
http://www.java-cn.net/book/index.jsp
这里书比较多,包括《Thinking in java》、《java2编程详解》、《Jbuilder开发人员指南》、《Java程序设计技巧1001例》。。。还有一些简单程序的源代码
http://www.mindview.net/
这是《Thinking in java》作者的主页,英文版的书也可以在这里下
http://www.vvsoft.net/vvbkss/slctsingleline.asp?编程语言
这里的书很多,但是很乱,有时间的话自己找找吧
http://www.cn-java.com/
http://www.jdon.com/index.html
http://www-900.ibm.com/developerworks
IBM关于java的站点
http://www.csdn.net/develop/list_article.asp?bigclassid=6
CSDN文档中心的一些文章
http://sourceforge.net/
http://drivejava.www2.cn4e.com/download/
<<太极拳诀>>
欲避此病须知阴阳,
黏既是走;走既是黏,
阴不离阳;
阳不离阴,
阴阳相济方为懂劲,
懂劲后愈练愈精,
默识揣摩渐至从心所欲,
本是舍己从人,
多误舍近求远,
所谓差之毫厘谬以千里,
学者不可不详办焉。
夫君子之行,静以修,俭以养德。
非澹泊无以明志,非宁静无以致远。
夫学须静也。
才须学也,非学无以广才,非志无以成学。
淫漫则不能精励,险躁则不能治性,年与时驰,意与日去。
遂成枯落,多不接世,悲守穷庐,将复何及!
悲守穷庐,将复何及!
这是我从网上下载的一份手机游戏策划模版,基本的东西都有了,值得各位初学者参考,在具备自己风格的策划书中能糅合这里的东西当然是最好了。
--------------------------------------------------------------------------------------------------------------------------------------
JAVA手机游戏策划书基本模版
准备工作:(运行游戏的手机硬件参数)
1、 游戏支持的手机类型
2、 手机实际下载传输速度和传输方式
3、 手机屏幕尺寸大小
4、 游戏采用的开发平台
5、 在手机上游戏运行速度:
6、 手机画面分辨率
7、 手机内存容量大小
一、 策划提纲
1、 游戏目标客户
2、 游戏玩法阐述
3、 游戏内容
4、 游戏*作设计
5、 游戏策划及关卡策划
二、 估计游戏开发进度
1、 demo版本发布时间
2、 alpha版本发布时间\
3、 beta版本发布时间
4、 正式版本发布时间
5、 后续改进版本发布时间
三、 技术参数
1、 图像率新速度
2、 文件安装完大小
3、 文件未安装大小
4、 使用过程中有戏占用内存
5、 占用内存峰值
6、 游戏过程中的通话处理及安全处理
7、 游戏图形特效清单
8、 游戏与*作系统兼容性
9、 图形文件/声音文件/数据文件
10、 目录结构/变动文件清单
11、 使用的动态链接库
四、 游戏中所有音效清单
音效说明
出现位置
五、 游戏所有图形清单
1、 游戏界面部分
2、 游戏动画部分
3、 游戏内部
1) 根据关卡划分的图像清单
2) 游戏人物原创设计
六、 代码开发标准
七、 基本风格设定
1、 风格表述说明、优点及适应考虑
2、 代表其游戏风格的图像
八、 游戏流程图
1、 游戏*作流程图
2、 游戏开发模块流程图
3、 与其他程序接口部分的特别流程图
组队系统需要什么?帮会系统又需要什么?
加个聊天频道,弄个链表保存一下就叫组队啦?
先看看队伍的定义:共同的,统一的时间,空间,目标。
没有哪个玩家会觉得你打你的怪,我做我的任务这样组队在一起比较有意义吧。
当然,当他们只是想利用组队进行交流的话,这个到无所谓。
但是经常就会有些玩家,由于不明白对方的意愿,而不知道该不该和他组队。
那么如何来改进这个组队系统呢?有些网络游戏做得比较好,就是提供了征求组队
这样的命令,当这个命令发出后,会显示组队的级别的范围。虽然作用很小,但是
起码保证在级别相差不是太大的情况下,各个玩家的意愿基本是相同的这样的要求。
然后说说时间和空间。其实这个没什么好说的,时间上来讲,肯定是统一的,因为
组队这个行为本身就是及时发起的。对于空间来说,则比较难保证,因为玩家的行
动总是会按照自己的意愿来。所以说,召唤队友这种魔法的设定实际上是一种对于
强调组队空间性上的一种比较无奈的选择。
好了,理解了上面各项因素之后,再来看看该如何设置组队。
首先,你需要给希望征集队友的队长,和没有队伍的玩家提供两种找队友的方式。
那么,如何做到能找到合适的队友呢?这里有两种方法,一种是提供一些事先制定
好的征求队友的语句,供玩家选择,然后设置一些在默认的环境下,默认的征求队
友的方法。
另外对于队伍的结构,或者说对于队长位置的重视性,应该足够重视,否则在玩家
组队的同时,结构可能会由于缺乏核心的指挥人员而比较松散,从而导致队伍最初
建立的时候的初衷无法完成。比如队长应该可以使用召唤队友之类的命令来形成空
间上的统一,或者可以在队伍频道中使用不同颜色的字来区别于普通的队员。
下面来谈谈关于帮会
帮会和队伍有些不同的就是时间上有不统一这一因素在里面,那么解决这个问题的
首要任务就是给不同的帮会提供各自的留言系统来尽量的统一其时间上的不确定性。
接下来关于帮会的还有一些问题,这个就要从帮会的劣势来讨论解决方法了。先来
看看关于帮会的结构中都有哪些缺陷:
1,集体交流的时间是一个方面,也就是上头讲到的时间不统一的问题。
2,领导人的问题会很大程度上影响整个帮会的效率。
3,队员水平的参差不齐,会在某种程度上影响其他队员的发挥。
4,不同的意见会导致矛盾的产生。
5,帮会如果粘合得太紧,会导致一种排外情绪。
那么再来看看如何设计能最大程度的弥补以上所描叙的关于帮会的风险问题。
这里要提出一个最关键的概念,就是一个帮会的Interchangeability(自我调节
能力)那么我们如何来从设计上提供这样一种这样的能力呢?最简单的方法是提
供一套vote/elect机制,也就是说投票和选举的机制,可以给帮会内部提供一些
自我调节的能力。至于投票的内容,可以包括选举领导人,或者踢除/添加新的会
员。
上面的解决方案在解决某些问题的瓶颈的同时也扩大了时间不统一的问题。比如
说某位帮会会员长时间不上线,导致投票的决策下不来,如何解决?这实际上就
牵扯到一些设计细节了,比如说可以设置一个due的时间之类的来解决。
另外一点很重要的因素,就是要正确的看待帮内的矛盾。所谓正确看待,就是要
鼓励玩家将矛盾显性化,而不是隐藏在私底下,而很多时候,很多矛盾是否公开
或者保密也就仅仅只是一念之差的问题。而很多时候的矛盾是由游戏内部资源分
配不均匀造成的,矛盾的产生直接受到社会舆论的影响,如果能在游戏中宣扬一
种关于矛盾公开的舆论,可以一定程度上减少这种现象带来的影响。
既然谈到这种做法,就不得不谈谈关于玩家在帮会里面的行为取向,这里有四点
定理:
1,帮会成员总是会比较热心的参加帮内的活动
2,帮会成员总是会比较努力的致力于帮会的发展
3,帮会成员总是很自豪把自己和帮会联系到一起
4,帮会成员总是喜欢把帮会的目标作为自己的目标
当有帮会成员的行为取向偏离了以上四点的时候,我们成他为边缘人物。最容易
产生矛盾的地方就往往是边缘和帮会热心派成员之间的矛盾。明白了这一点之后,
其实用帮会权限系统也可以比较好的控制矛盾的产生。比如分为,帮主,副帮主,
资深帮众,普通帮众之类的,不同的级别对帮会的资源有不同程度的访问权限。
最后一点就是关于帮会缺陷中的第5点,排外因素。其实对于这一点,目前的各个
游戏都已经做得比较完善了,就是加强帮会间的互动,比如说帮会战就是一种很
好的互动,同时也可以增加经济上或者人员上的互动就更好了。
要把J2ME程序与J2SE程序区分开来,其依据就是J2ME运行所处的受限环境。多数J2ME系统的主要受限条件就是可以存储和运行程序所需内存的大小。例如,许多MIDP设备限制应用程序的尺寸不大于50K,这远远不及Server端J2SE运行环境下那些成兆的程序。实际应用中,程序会很容易超出这些限制条件。通过本篇您将学到一些减小程序尺寸大小的技巧,并在下面的例子中实践这些技术。这个例子MIDlet仅仅显示一个文本框并在其内容改变时发声。
package com.j2medeveloper.techtips;
import javax.microedition.lcdui.*;
public class BeforeSizeOptimization extends
BasicMIDlet {
public static final Command exitCommand =
new Command( "Exit",
Command.EXIT, 1 );
public BeforeSizeOptimization(){
}
protected void initMIDlet(){
getDisplay().setCurrent( new Mainform() );
}
public class Mainform extends form {
public Mainform(){
super( "Mainform" );
addCommand( exitCommand );
append( textf );
setCommandListener( new CommandListener(){
public void commandAction( Command c,
Displayable d ){
if( c == exitCommand ){
exitMIDlet();
}
}
}
);
setItemStateListener(
new ItemStateListener() {
public void itemStateChanged(
Item item ){
if( item == textf ){
AlertType.INFO.playSound(
getDisplay() );
}
}
}
);
}
private TextField textf =
new TextField( "Type anything", null,
20, 0 );
}
} |
虽然这个MIDlet在此仅作为一个例子,但使用的尺寸优化技巧可以适用于任一J2ME的profile上。
注意,上面的MIDlet类需要下面的辅助类:
package com.j2medeveloper.techtips;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public abstract class BasicMIDlet extends MIDlet {
private Display display;
public BasicMIDlet(){
}
protected void destroyApp( boolean unconditional )
throws MIDletStateChangeException {
exitMIDlet();
}
public void exitMIDlet(){
notifyDestroyed();
}
public Display getDisplay(){ return display; }
protected abstract void initMIDlet();
protected void pauseApp(){
}
protected void startApp()
throws MIDletStateChangeException {
if( display == null ){
display = Display.getDisplay( this );
initMIDlet();
}
}
} |
用J2ME WTK打包时,本例子MIDlet占用4K空间。
减小尺寸的首要步骤就是通过修正程序的功能实现来去掉多余的类。程序的所有功能确实必须都实现吗?用户可以不需要这些“附属功能”吗?要设计尽可能小的程序,这里的MIDlet例子已经相当小了。
第二步就是深入考察程序定义的内部类,特别是匿名类。记住,每个类文件都有一定量的与之相关的系统开销。即便最普通的类也有系统开销。
public class foo {
// nothing here
} |
编译上边的类,生成的类文件大约200byte大小。比如实现一个事件监听器,就是对匿名类的常见使用。在例子MIDlet中就定义了两个此类的监听器。接下来进行的最简单的优化就是,让主MIDlet类实现CommandListener和ItemStateListener接口,并把监听器代码移至此处。记住,多个对象可以使用同样的监听器。必要时,可以使用传递至commandAction和itemStateChanged方法的参变量来区分它们。
内部类也可使代码过大,因为编译器必须生成特殊的变量和方法,以便内部类可以访问包含它们的类的私有内容。请参考内部类的规范以获取更多信息。
第三步,尽量使用现有的类。例如,基于CLDC的profile没有构造集合类,所以我们可以用内建的Hashtable和Vector类来实现之。构造MIDP程序时也可采用此法。例子MIDlet中定义了一个form字类来生成主表,可以容易的如下直接生成:
mainform = new form( "Mainform" );
mainform.addCommand( okCommand );
mainform.setCommandListener( listener ); |
这里没有正确或者错误的答案,只是要推敲。
第四步就是破坏程序的继承关系。你也许把相关的代码放到一个或多个抽象类中,这是OOD中为提高程序间代码重用的推荐做法。虽然破坏继承关系与你所学知识相违背,但简化的继承关系更有意义。特别的,当你的的抽象类――可能来自其他项目――仅仅被继承一次时,破坏继承关系的结果不言而喻。例如,例子MIDlet继承了BasicMIDlet类,但两者合并为一个类。
第五步就是要缩短名字长度,如包名、类名、方法名和数据元素名。看起来有些蠢,但一个类文件确实包含太多的符号信息。缩短各量的名字可以缩小生成的类文件尺寸。这种节省不会特别明显,但多个类中进行总加的结果还是可观的。包名对减小尺寸来讲特别合适。MIDP程序是完全自我包容的,完全可以不使用包名,因为在手持设备上包名根本不可能与其他类名冲突。例子MIDlet中,可以把com.j2medeveloper.tchtips包名去掉。
注意,一般来讲,缩短名字不需要手工去做,要用一个“混淆器”去做。“混淆器”的主要功能是“隐藏”程序代码,使之不能通过反编译读出。它的副作用是减小了程序的尺寸。因为隐藏过程主要通过更改方法和数据成员的名字来完成。有一个开源的混淆器称为RetroGuard,可以免费从http://www.retrologic.com得到。也有一些商业包可用。(当为基于CLDC的profile混淆时,记得在预校验之前混淆,否则混淆器将使类文件中的预校验数据失效。)
最后,深入数组的初始化。(例子MIDlet没有做数组初始化,但对程序来说初始化是重要的一步) 在编译时,一个数组初始化声明如下所示:
int arr[] = { 0, 1, 2, 3 };
而实际生成代码的过程如下所示:
<ccid_nobr>
<table width="400" border="1" cellspacing="0" cellpadding="2"
bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">
<tr>
<td bgcolor="e6e6e6" class="code" style="font-size:9pt">
<pre><ccid_code> arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
arr[3] = 3; |
这个过程可以通过使用Java 2 SDK中附带的javap工具把二进制代码反编译成类文件去看(使用-c选项)。也许你会诧异于看到的内容,特别当你希望看到的是一排排二进制常数时。有两种方法可以让你看不到反编译的程序代码,(1)把数据编码为字符串,运行时解码之,或者(2)把数据存为二进制文件并与程序打包,用类装载器的getResourceAsStream方法在运行时存取之。
以上只是一些指导性的方法,对每个J2ME程序而言,这里没有具体到步骤。但是多数方法可以应用的本例。优化后的MIDlet如下所示:
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class ASO extends MIDlet
implements CommandListener,
ItemStateListener {
private Display display;
private form mainform;
private TextField mainformTF =
new TextField( "Type anything", null,
20, 0 );
public static final Command exitCommand =
new Command( "Exit",
Command.EXIT, 1 );
public ASO(){
}
public void commandAction( Command c,
Displayable d ){
if( c == exitCommand ){
exitMIDlet();
}
}
protected void destroyApp( boolean unconditional )
throws MIDletStateChangeException {
exitMIDlet();
}
public void exitMIDlet(){
notifyDestroyed();
}
public Display getDisplay(){ return display; }
protected void initMIDlet(){
mainform = new form( "Mainform" );
mainform.addCommand( exitCommand );
mainform.setCommandListener( this );
mainform.setItemStateListener( this );
mainform.append( mainformTF );
getDisplay().setCurrent( mainform );
}
public void itemStateChanged( Item item ){
if( item == mainformTF ){
AlertType.INFO.playSound( getDisplay() );
}
}
protected void pauseApp(){
}
protected void startApp()
throws MIDletStateChangeException {
if( display == null ){
display = Display.getDisplay( this );
initMIDlet();
}
}
} |
关于作者:Eric Giguere是来自Sybase下属iAnywhere Solutions的软件开发人员。他致力于手持设备和无线计算领域的Java技术。他是滑铁卢大学的数学学士和数学硕士,写了很多有关计算的文章。
手机游戏产业价值几何?对于包括移动运营、内容和服务提供在内的整条移动应用产业链而言,在所谓手机游戏产业的宏观概念下到底潜藏着一个多大规模的市场?可以挖掘到哪些市场亮点和创新的应用种类?又有多少亦明亦暗的产业障碍还亟待跨越?
表面看来,手机游戏正在成为运营商迅速创收的新渠道,并且似乎即将成为语音呼叫和短信息之外存在的又一个潜力巨大的移动服务市场。运营商通过收取游戏下载费用来增加ARPU值并同时拉动数据服务消费量实现增长。服务和内容提供商(SP和CP)们则通过出卖游戏下载版权和提供下载服务平台赚取更多的利润提成。
事实上,手机游戏产业早在上世纪90年代后期就已经初具雏形。当时,GSM手机基本都内嵌了一些简单的黑白游戏,比如经典不衰的“贪吃蛇”和“俄罗斯方块”。在当时,是否内置有这些游戏已经成为一款畅销手机的必备要素。紧接着,短信息(SMS)服务所取得的巨大成功(世界各地每个月在SMS服务上花费近300亿美元)使得运营商们看到了移动数据服务市场蕴含的庞大潜力,并且萌生了将手机游戏培养成移动数据服务的下一代杀手应用的冲动。
现在就让我们来揭开这位“杀手”的神秘底牌吧。
底牌一:到底有多少游戏形式可供挖掘? 迄今为止,业界所能挖掘到的手机游戏种类大致有五种类型(这里不包含N-GAGE这种纯粹是游戏机和手机的融合产物),不同的游戏类型在开发难度和市场容量方面存在着较大差别。
嵌入式游戏
手机出厂时固化的嵌入式游戏无疑是所有手机游戏的起源。Nokia算是始作俑者之一,当时它的开发人员向其经典的6100系列手机添加了“贪吃蛇”游戏。与短消息非常相似,“贪吃蛇”游戏自然而然地流行起来:没有主动的营销,只是凭借口碑的传诵就可以流行起来,而6100和3310系列手机也间接受益成为了当时的畅销手机。
对于这一意外的成功(Nokia认为大约每周会有100万手机用户在经常玩这款游戏),让许多运营商开始相信手机游戏的确拥有强劲的发展潜力。唯一的不足在于这些游戏无法更新,因此很容易被时尚的潮流所厌倦和抛弃。手机厂商们必须不断地开发和销售更多的新游戏来取代它们……就这样,手机游戏市场终于诞生了。
SMS游戏和MMS游戏
从易用性、吸引力等角度看来,短信息(SMS)完全不适合被作为一种游戏类型。但是,SMS却适用于那些早期的文字MUD(网游的前身)游戏,游戏的玩家相互发送简短的文本消息,用以控制其游戏角色的行为。此外,对于一些吸引力颇高的“投票式游戏”以及其他智力测验类游戏,SMS也是相当适用的游戏手段。
我们可以看到,尽管SMS并非理想的游戏媒介,但它是让手机游戏用户和潜在用户习惯于使用手机进行游戏娱乐的绝妙方式。
另一方面,我们看到多媒体消息服务(MMS)已经成为SMS发展的下一阶段,它为用户简单的文本体验增加了图形、照片乃至视频片段等新内容元素。
但是从玩游戏的观点看,MMS在功能本质上相比SMS并没有实现根本性的提升。业界认为MMS仍可以被用作实现某些比较初级的互动游戏,但总体而言,移动游戏业并不看好MMS平台,相反注意到更有效和更具活力的Java/J2ME技术已经日趋成熟,而手机游戏的发展为此也即将登上新的高峰。
Java/J2ME:手机游戏的未来?
Java/J2ME技术是推动手机游戏向更高层次进一步发展的关键动力。
这些技术是移动运营商、手机制造商和应用开发商进军手机游戏领域时一直期待的基础元素。通过Java/J2ME实现拥有动画和声音的可下载游戏,这就是手机游戏应用下一阶段的发展方向。
由Java/J2ME技术构建的可下载游戏不仅使手机游戏可以更为轻易地吸引到用户的兴趣,同时也有利于创造更为多样化的计费形式。例如对于一些售价低廉的游戏,可以参照类似街机游戏的业务模型进行销售。用户可以先付费,然后一直玩这款游戏直到他们的预付费或游戏时间用完为止。对于另外一些手机游戏,运营商可以允许用户一次花费更多的钱而获得无限制的游戏时间,用户甚至还可以购买某一游戏,然后依照版权规定的相关协议将此款游戏转让给其他玩家。
当前,具有Java应用下载功能的手机已经在市场上逐渐流行起来,甚至可能从2004年起将被作为新型手机的标准配置。另一方面,随着功能更为强大的手机芯片、更多容量的内存以及正在大规模开发中的Java游戏的出现,未来的手机无疑将成为一个真正的游戏平台。
Flash:甚至比Java更好?
当然,并不是所有人都把Java(特别是移动版的J2ME)看作手机游戏发展的真正方向。反对派的意见认为,Java游戏目前的性能表现很难激起游戏玩家的真正兴趣。同时,我们看到如今在互联网上几乎所有的Web游戏已经开始被Flash游戏所统治,Java游戏的辉煌正在逐渐褪去。所以Flash的支持者们相信,同样的情形必将在手机游戏身上重演。
除了J2ME程序处理周期长,对于手机芯片的运算能力要求较高以及运行过程相当耗电等缺点之外,在游戏方面J2ME的最大缺点的确让人难以想象—竟然是玩家在游戏中无法同时按下两个功能键。无论是游戏老手还是缺乏经验的新手,这都是玩家所厌恶的一个致命缺陷。所幸Flash不仅克服了这一缺点,而且对于更为复杂的图形与声音处理也应付自如。有专业咨询师认为,在目前Java当道的情形下,敢于将Flash嵌入到手机和手机游戏中的厂商还寥寥无几,但是不可否认Flash最终将成为所有手机游戏应用的标准操作环境。
底牌二:手机游戏市场究竟有多大? 我们首先将手机游戏分为两类,然后再分析各自的市场容量。第一类是包括智力测验、文本问答等在内的基于短信息(SMS或MMS服务)的游戏。第二类是“复杂的可下载游戏”,这其中包括了绝大多数未来的游戏应用。
基于短信息的游戏
基于短信息的游戏往往定价也偏低,因此这类游戏的收入潜力可能不如人们最初想像的那般乐观。但是考虑到使用短信息的庞大用户群就是这种游戏的潜在市场,因此我们仍将最终得到一个巨大的市场容量模型。
在全球部分发达地区,基于短信息的手机游戏服务已经开始赢利。特别是在欧洲,已经初步形成了一个规模达数十亿美元的行业市场。然而反观北美市场的规模,目前则只有令人失望的8亿美元而已,在2008年,北美市场规模预期将超越10亿美元大关。
复杂的可下载游戏
未来几年中,可下载的手机游戏市场预计将出现跨国和跨地域的发展趋势。在一些地区,如果2.5G和3G手机以及相关网络的渗透率较高,那么可下载的手机游戏市场份额也会相应出现明显的增幅。当然,我们不能忽视短信息游戏所蕴含的市场能量,其中许多的游戏很可能将得到用户的广泛接受甚至成为社会文化的一部分。这些积极因素都将为第三方游戏提供商和提供游戏下载的移动运营商带来丰厚的利润。
尽管今后几年中手机游戏下载的价格将呈整体下降的趋势,但这一市场的赢利前景仍然非常乐观。据Juniper Resource的研究显示,目前全球范围内可下载的手机游戏已经形成了一个价值30亿美元的巨大市场。今后几年中,随着市场领域的不断扩大以及中高端手机价格的相应下降,其市场规模将实现翻番,向60亿美元迅速靠近。这的确是一次真正的商机!
当然,Juniper Resource表示,若想让这一切预测成为现实,那么必须满足两方面的前提条件:始终有关键的市场推动因素以及有益于市场规模化的运营管制和计费基础。
底牌三:有多少产业障碍亟待解除? 手机外形因素
所有移动娱乐服务的明显缺点是屏幕尺寸过小和分辨率太低。直到不久前,手机仍不是专门为玩游戏而设计的。彩屏技术的出现增加了对使用者的吸引力,事实上,彩屏也是目前新手机销售的最大推动因素。但是,生产适合于彩色屏幕性能的手机游戏完全取决于游戏生产商。嵌入式游戏和某些复古游戏最适合于基本的移动电话屏幕,因为它们的黑白屏幕分辨率不高而且符合用户对某种传统体验的期待心理。但对于其他大部分手机游戏而言,则需要更高分辨率的屏幕。
手机内存制约因素
有限的手机内存可满足今天大多数普通游戏和其他娱乐应用的需要,但是在新一代游戏上则成为最大的障碍。例如,一般手机(甚至是某些市面上更先进的手机)一次也只能保存4个游戏。这意味着玩家的游戏体验已经受到限制。他们必须做出选择:要么保留喜爱的游戏并有效地保存它们,要么在他们希望尝试新游戏时必须放弃他们以前喜爱的游戏。
新型手机的普及
目前的一些游戏在设计上几乎可以适合大部分手机。但是,如果游戏市场想拥有一个持续繁荣的未来,那么能够处理彩色图像、复合音色并最终可处理Java下载的手机数量必须大大增加和普及。也许,只有2.5G和3G手机具有这种可能性,并引发新一波互动游戏的浪潮。
网络技术
目前,多数用户拥有基于2G的手机,它们一般适合于通过SMS提供简单的智力竞赛类的游戏和服务。为了获得更丰富的游戏体验,用户将需要WAP、2G乃至3G手机,但距离规模应用仍有很长的路要走。此外,在消费者心目中,WAP在许多方面的形象不佳,性能不可靠,速度又慢得令人难以忍受。但是WAP可能是早期提供手机游戏的首选平台。当然,这必须是一种新的、改进的WAP版本,当在2.5G或3G网络上使用时,它的性能与WAP 1.0早期广告承诺的“无线Internet”非常像。当然,考虑到它的形像缺损,未来的市场推广应尽量避免提到“WAP因素”。