﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-dream-in-fly-随笔分类-手机游戏</title><link>http://www.blogjava.net/dreaminfly/category/146.html</link><description>路上...</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 15:24:04 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 15:24:04 GMT</pubDate><ttl>60</ttl><item><title>在Eclipse3.0.1上安装EclipseME0.5.5版本</title><link>http://www.blogjava.net/dreaminfly/archive/2005/04/18/3401.html</link><dc:creator>小毅</dc:creator><author>小毅</author><pubDate>Mon, 18 Apr 2005 03:08:00 GMT</pubDate><guid>http://www.blogjava.net/dreaminfly/archive/2005/04/18/3401.html</guid><wfw:comment>http://www.blogjava.net/dreaminfly/comments/3401.html</wfw:comment><comments>http://www.blogjava.net/dreaminfly/archive/2005/04/18/3401.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreaminfly/comments/commentRss/3401.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreaminfly/services/trackbacks/3401.html</trackback:ping><description><![CDATA[<FONT color=#0000ff size=2>开始安装EclipseME 0.5.5:<BR><BR>从0.5.5版本开始，EclipseME将采用新的安装模式。而在0.5.0版本及之前版本均是一个压缩文件解压到Eclipse的安装路径下即可。这种安装形式已经不在使用，我们将采用以下的新的安装模式。如果你仅是要升级EclipseME到0.5.5版本，那么也要按以下的新的安装方法来做。<BR><BR>1）第一步：打开Eclipse，选择Help -&gt; Software Updates -&gt; Find and Install。<BR><BR></FONT>
<CENTER><IMG src="http://tech.ccidnet.com/pub/attachment/2005/1/388637.jpg"></CENTER><BR><BR>
<CENTER><IMG src="http://tech.ccidnet.com/pub/attachment/2005/1/388639.jpg"></CENTER><BR><BR>
<CENTER><IMG src="http://tech.ccidnet.com/pub/attachment/2005/1/388641.jpg"></CENTER><BR><BR>
<CENTER><IMG src="http://tech.ccidnet.com/pub/attachment/2005/1/388643.jpg"></CENTER><BR><BR>
<CENTER><IMG src="http://tech.ccidnet.com/pub/attachment/2005/1/388645.jpg"></CENTER><BR><BR>
<CENTER><IMG src="http://tech.ccidnet.com/pub/attachment/2005/1/388647.jpg"></CENTER><BR><BR>
<CENTER><IMG src="http://tech.ccidnet.com/pub/attachment/2005/1/388649.jpg"></CENTER><BR><BR>
<CENTER><IMG src="http://tech.ccidnet.com/pub/attachment/2005/1/388651.jpg"></CENTER><BR><BR>
<CENTER><IMG src="http://tech.ccidnet.com/pub/attachment/2005/1/388653.jpg"></CENTER><BR><BR>
<CENTER><IMG src="http://tech.ccidnet.com/pub/attachment/2005/1/388655.jpg"></CENTER><BR><BR>
<CENTER><IMG src="http://tech.ccidnet.com/pub/attachment/2005/1/388657.jpg"></CENTER><BR><BR>
<CENTER><IMG src="http://tech.ccidnet.com/pub/attachment/2005/1/388659.jpg"></CENTER><BR><BR>
<CENTER><IMG src="http://tech.ccidnet.com/pub/attachment/2005/1/388661.jpg"></CENTER><img src ="http://www.blogjava.net/dreaminfly/aggbug/3401.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreaminfly/" target="_blank">小毅</a> 2005-04-18 11:08 <a href="http://www.blogjava.net/dreaminfly/archive/2005/04/18/3401.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse开发J2ME</title><link>http://www.blogjava.net/dreaminfly/archive/2005/04/18/3400.html</link><dc:creator>小毅</dc:creator><author>小毅</author><pubDate>Mon, 18 Apr 2005 03:03:00 GMT</pubDate><guid>http://www.blogjava.net/dreaminfly/archive/2005/04/18/3400.html</guid><wfw:comment>http://www.blogjava.net/dreaminfly/comments/3400.html</wfw:comment><comments>http://www.blogjava.net/dreaminfly/archive/2005/04/18/3400.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreaminfly/comments/commentRss/3400.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreaminfly/services/trackbacks/3400.html</trackback:ping><description><![CDATA[<P><FONT color=#0000ff size=2>现在<SPAN style="FONT-SIZE: 12pt">Eclipse</SPAN>的最新版本是<SPAN style="FONT-SIZE: 12pt">3.0.2</SPAN>，但建议使用3.01M6版本。而<SPAN style="FONT-SIZE: 12pt">EclipseME</SPAN>刚刚推出了<SPAN style="FONT-SIZE: 12pt">0.9.0</SPAN>版本，完全支持</FONT><SPAN style="FONT-SIZE: 12pt"><FONT color=#0000ff size=2>Eclipse3.01M6版。<BR>1、下载JDK：</FONT><A href="http://java.sun.com/"><FONT color=#0000ff size=2>http://java.sun.com</FONT></A><FONT color=#0000ff size=2>&nbsp;下载JDK1.4.2版本。或者此地址：<BR></FONT></SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt"><FONT color=#0000ff size=2>2、下载J2ME版本：</FONT><A href="http://java.sun.com/"><FONT color=#0000ff size=2>http://java.sun.com</FONT></A><FONT color=#0000ff size=2>&nbsp;下载。或者此地址：</FONT></SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt"><FONT color=#0000ff><FONT size=2>3、<FONT color=#0000ff>下载</FONT><SPAN style="FONT-SIZE: 12pt"><FONT color=#0000ff size=2>Eclipse3.01M6版本：</FONT><A href="http://www.eclipse.org/"><FONT color=#0000ff size=2>http://www.</FONT><SPAN style="FONT-SIZE: 12pt"><FONT color=#0000ff size=2>Eclipse.org</FONT></A><FONT color=#0000ff size=2>&nbsp;下载。或者此地址</FONT>：<BR><BR><A href="ftp://ftp.jaist.ac.jp/pub/eclipse/eclipse/downloads/drops/S-3.1M6-200504011645/eclipse-SDK-3.1M6-win32.zip">ftp://ftp.jaist.ac.jp/pub/eclipse/eclipse/downloads/drops/S-3.1M6-200504011645/eclipse-SDK-3.1M6-win32.zip</A></SPAN></SPAN></FONT></FONT></SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt"><SPAN style="FONT-SIZE: 12pt"><SPAN style="FONT-SIZE: 12pt"><FONT color=#0000ff><FONT size=2>4、<FONT color=#0000ff>下载</FONT><SPAN style="FONT-SIZE: 12pt"><FONT color=#0000ff size=2>Eclipse3.01M6版本的中文语言包：</FONT><A href="http://www.eclipse.org/"><FONT color=#0000ff size=2>http://www.</FONT><SPAN style="FONT-SIZE: 12pt"><FONT color=#0000ff size=2>Eclipse.org</FONT></A><FONT color=#0000ff size=2>&nbsp;下载。或者此地址</FONT>：<BR><BR><A href="http://download.eclipse.org/eclipse/downloads/drops/L-3.0.1_Translations-200409161125/NLpack-eclipse-SDK-3.0.x-win32.zip"><FONT color=#0000ff size=2>http://download.eclipse.org/eclipse/downloads/drops/L-3.0.1_Translations-200409161125/NLpack-eclipse-SDK-3.0.x-win32.zip</FONT></A></SPAN></SPAN></FONT></FONT></SPAN></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt"><SPAN style="FONT-SIZE: 12pt"><SPAN style="FONT-SIZE: 12pt"><SPAN style="FONT-SIZE: 12pt"></SPAN></SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 12pt"><SPAN style="FONT-SIZE: 12pt"><SPAN style="FONT-SIZE: 12pt"><FONT color=#0000ff><FONT size=2>5、下载<SPAN style="FONT-SIZE: 12pt"><FONT size=2>Eclipse3.01M6的J2ME插件</FONT><SPAN style="FONT-SIZE: 12pt"><FONT size=2>EclipseME0.9.0版本：</FONT><A href="http://www.eclipseme.org/"><FONT size=2>http://www.</FONT><SPAN style="FONT-SIZE: 12pt"><FONT size=2>EclipseME.org</FONT></A><FONT size=2> 下载。或者此地址</FONT>：<A href="http://nchc.dl.sourceforge.net/sourceforge/eclipseme/eclipseme.feature_0.9.0_site.zip"><BR><BR><FONT color=#0000ff size=2>http://nchc.dl.sourceforge.net/sourceforge/eclipseme/eclipseme.feature_0.9.0_site.zip</FONT></A></SPAN></SPAN></SPAN></FONT></FONT></SPAN></SPAN></SPAN></P>
<P><SPAN style="FONT-SIZE: 12pt"><SPAN style="FONT-SIZE: 12pt"><SPAN style="FONT-SIZE: 12pt"><SPAN style="FONT-SIZE: 12pt"><SPAN style="FONT-SIZE: 12pt"><SPAN style="FONT-SIZE: 12pt"><FONT color=#0000ff><FONT size=2>下载完以上五个文件后，进行相应顺序的安装。另外：<SPAN style="FONT-SIZE: 12pt">Eclipse的软件不需要安装，直接解压即可，很方便吧。</SPAN></FONT></FONT></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P><img src ="http://www.blogjava.net/dreaminfly/aggbug/3400.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreaminfly/" target="_blank">小毅</a> 2005-04-18 11:03 <a href="http://www.blogjava.net/dreaminfly/archive/2005/04/18/3400.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>菜鸟初学Java的备忘录(三)</title><link>http://www.blogjava.net/dreaminfly/archive/2005/04/01/2726.html</link><dc:creator>小毅</dc:creator><author>小毅</author><pubDate>Fri, 01 Apr 2005 12:30:00 GMT</pubDate><guid>http://www.blogjava.net/dreaminfly/archive/2005/04/01/2726.html</guid><wfw:comment>http://www.blogjava.net/dreaminfly/comments/2726.html</wfw:comment><comments>http://www.blogjava.net/dreaminfly/archive/2005/04/01/2726.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreaminfly/comments/commentRss/2726.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreaminfly/services/trackbacks/2726.html</trackback:ping><description><![CDATA[<FONT color=#0000ff size=2>作者：xm4014<BR><BR>今天开始学习Java中多线程的实现. <BR></FONT>
<P><FONT color=#0000ff size=2>　　线程是一些可以并行的，独立的执行的代码.之前我编的程序都只能做一件事情,也就是只有一个线程.多线程的编程就是可以将程序任务分成多个并行的子任务,同时运行,互不干扰.我对多线程的理解是从格斗游戏得来的.格斗游戏中两人对打就是通过两个线程来实现的吧,否则如何能够你出你的招,我发我的冲击波呢. <BR></FONT>
<P><FONT color=#0000ff size=2>　　(1月18日)突然想到一个问题,补充一下.多线程是不是我们通常所说的多任务呢?我的理解是,不能这样说也可以这样说. <BR></FONT>
<P><FONT color=#0000ff size=2>　　简单说来,多线程提供了一种在进程内部进行多个线程并行调度的机制,而多任务则提供的是在一个操作系统内部运行多个进程的机制. <BR></FONT>
<P><FONT color=#0000ff size=2>　　多任务操作系统(如Windows)的基本原理是这样的:操作系统将CPU的时间片分配给多个线程,每个线程在操作系统指定的时间片内完成(注意,这里的多个线程是分属于不同进程的).操作系统不断的从一个线程的执行切换到另一个线程的执行,如此往复,宏观上看来,就好像是多个线程在一起执行.由于这多个线程分属于不同的进程,因此在我们看来,就好像是多个进程在同时执行,这样就实现了多任务.Whoops，真绕口. <BR></FONT>
<P><FONT color=#0000ff size=2>　　如上,多线程和多任务是有很明显的区别的.但是再想一下,在一个应用程序内实现多线程不也是靠CPU分配时间片吗?既然原理是相同的,那么多线程也可以说是多任务的. <BR></FONT>
<P><FONT color=#0000ff size=2>　　一个Java程序启动后,就已经有一个线程在运行,我们可以通过下面的例子来初步建立一个线程的实际印象 <BR></FONT>
<P>
<TABLE borderColor=#0099ff cellSpacing=0 cellPadding=5 align=center bgColor=#ddedfb border=1>
<TBODY>
<TR>
<TD><FONT color=#0000ff size=2>class testthread{<BR>public static void main(String args[]){<BR>Thread t=Thread.currentThread();<BR>t.setName("This Thread is running");<BR>System.out.println("The running thead:"+t);<BR>try{<BR>for(int i=0;i&lt;5;i++)<BR>{<BR>System.out.println("Sleep time"+i);<BR>Thread.sleep(1000);//挂起线程,就是让线程休息一会儿,<BR>//不占用系统资源,因此其它线程可以继续.<BR>//这里的Thread缺省表示主线程<BR>}<BR>}catch(InterruptedException e){System.out.println("thread has wrong");}<BR>}<BR>}</FONT></TD></TR></TBODY></TABLE>
<P><FONT color=#0000ff size=2>　　这只是一个线程,那么我们怎么实现多个线程呢?又怎样让线程做我安排它要做的事情呢? <BR></FONT>
<P><FONT color=#0000ff size=2>　　实现线程体的构造有两种方法. <BR></FONT>
<P><FONT color=#0000ff size=2>　　第一种方法是通过继承构造线程体. <BR></FONT>
<P><FONT color=#0000ff size=2>　　在Java中专门有一个Thread类,这个类里面有一个函数run(),里面记录着线程要完成的操作，就好像通常所说的主函数main()一样，run()函数运行完了,线程就结束了.通过继承这个类,我们可以定义我们自己的线程,在run函数中告诉它该做什么事情.下面的程序就是继承了一个SimpleThread类,用两个线程来输出HelloWorld. <BR></FONT>
<P>
<TABLE borderColor=#0099ff cellSpacing=0 cellPadding=5 align=center bgColor=#ddedfb border=1>
<TBODY>
<TR>
<TD><PRE><FONT color=#0000ff size=2>public class TwoThread{<BR><BR>  public static void main(String args[]){<BR>    new SimpleThread("HelloWorld1").start();//创建两个线程的实例,就这么简单<BR>    new SimpleThread("HelloWorld2").start();<BR>  }<BR><BR>}<BR>  class SimpleThread extends Thread{ file://真正的内容在这里<BR>    public SimpleThread(String str){<BR>      super(str);//super代表SimpleThread类的直接父类，这里就是Thread<BR>    }<BR><BR>file://我们要线程做的事情都在这里了<BR>    public void run(){<BR>      for(int i=0;i&lt;10;i++){<BR>        System.out.println(i+" "+getName());<BR>        try{<BR>          sleep((int)(Math.random()*1000));<BR>        }catch(InterruptedException e){}<BR>      }<BR>      System.out.println("Done!"+getName());   <BR>   }<BR>}</FONT></PRE></TD></TR></TBODY></TABLE>
<P><FONT color=#0000ff size=2>　　运行的结果是两个线程交替显示各自的HelloWorld十次,输出是混在一起的，因为两个线程是同时运行的. </FONT></P><img src ="http://www.blogjava.net/dreaminfly/aggbug/2726.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreaminfly/" target="_blank">小毅</a> 2005-04-01 20:30 <a href="http://www.blogjava.net/dreaminfly/archive/2005/04/01/2726.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>菜鸟初学Java的备忘录 (一)</title><link>http://www.blogjava.net/dreaminfly/archive/2005/04/01/2725.html</link><dc:creator>小毅</dc:creator><author>小毅</author><pubDate>Fri, 01 Apr 2005 12:18:00 GMT</pubDate><guid>http://www.blogjava.net/dreaminfly/archive/2005/04/01/2725.html</guid><wfw:comment>http://www.blogjava.net/dreaminfly/comments/2725.html</wfw:comment><comments>http://www.blogjava.net/dreaminfly/archive/2005/04/01/2725.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreaminfly/comments/commentRss/2725.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreaminfly/services/trackbacks/2725.html</trackback:ping><description><![CDATA[<P><FONT color=#0000ff size=2>作者：xm4014 <BR><BR><BR>　　今天第一次接触Java。</FONT></P>
<P>
<SCRIPT id=ad_text_pcjob src="http://www.pconline.com.cn/script/ad_text_pcjob.js" defer></SCRIPT>
<FONT color=#0000ff size=2>　　虽然以前间或的也看了些书籍，但多是隔靴搔痒,上不了正席,绝不敢说自己懂Java。接触一门新的技术和初恋一样,都是第一次,但不同的是后者一般开始无比甜蜜,结局却很痛苦,而前者则往往开始很痛苦,越到后来却越是有味,简直是欲罢不能.现在我就正处于这个很痛苦的阶段,连一个最简单的Helloworld都运行不出来,总是提示Excepion in thread "main" java.lan.NoClassDefFoundError. 只好上网去查,去搜.记性又不好,所以搜出来赶紧保存下来,常备无患. </FONT>
<P><FONT color=#0000ff size=2>　　一般来说安装完JDK之后,一定要按一下步骤配置，才可正确编译运行（假定jdk版本为1.4.0) </FONT>
<P><FONT color=#0000ff size=2>　　1.将jdk1.4.0-安装在自己机器的某个盘符的根目录下，如：可安装在C:\jdk下。 </FONT>
<P><FONT color=#0000ff size=2>　　***(以下出现的c:\jdk改为你自己安装JDK的目录)*** </FONT>
<P><FONT color=#0000ff size=2>　　2.如果你的运行环境是win98，则在C盘根目录下，autoexec.bat文件中，加入下面两条语句： </FONT>
<P><FONT color=#0000ff size=2>　　set Path=%PATH%;c:\jdk\bin </FONT>
<P><FONT color=#0000ff size=2>　　set CLASSPATH=.;c:\jdk\lib\dt.jar;c:\jdk\lib\tools.jar </FONT>
<P><FONT color=#0000ff size=2>　　保存后，重新启动机器，就完成了jdk1.4的安装。 </FONT>
<P><FONT color=#0000ff size=2>　　3.如果你的运行环境是win2000的话，则需在“控制面板”的“系统”下，“高级”选项的“环境变量”中，添加两个用户变量。 </FONT>
<P><FONT color=#0000ff size=2>　　其中一个用户变量的名称为“path”，值为“.;d:\j2sdk1.4.0_01\bin”, </FONT>
<P><FONT color=#0000ff size=2>　　另一个用户变量的名称为"CLASSPATH",值为“.;d"\j2sdk1.4.0_01\lib\dt.jar;d:\j2sdk1.4.0_01\lib\tools.jar”，单击“确定”即可。即完成了jdk1.4.0的安装。 </FONT>
<P><FONT color=#0000ff size=2>　　至于这样做的意义何在，我想应该是让Java系统在编译字节代码(.java)的时候需要一个什么东东的支持，如果你不告诉它这个东东放在哪个地方的话，它就犯傻了?! </FONT>
<P><FONT color=#0000ff size=2>　　看到屏幕上终于显示出Hello world对我来说意义重大.这是我近一年来写的第一个程序!再次踏上程序之路,简直有恍如隔世的感觉,已经快找不准我的位置了.还好原来学的一些关于C++和面向对象的皮毛没忘光光,所以费点周折熟悉了JDK的环境之后,接下来的事情就好办多了,心里也踏实多了. </FONT>
<P><FONT color=#0000ff size=2>　　用String类直接定义字符串变量比起C中讨厌的指针,感觉确实好的多,用惯了Object Pascal的我，如果再回去数* *,真要疯掉不可. </FONT>
<P><FONT color=#0000ff size=2>　　数组的定义和C,C++好像略有不同，记不清了，先记下来再说 </FONT>
<P><FONT color=#0000ff size=2>　　int[] number=new int[5] </FONT>
<P><FONT color=#0000ff size=2>　　String[] message=new String[5] </FONT>
<P><FONT color=#0000ff size=2>　　变量这一部分想起来要交待的也就这么多吧。虽然是菜鸟，但我也知道,总是如谭浩强般在语法上面死抠的人简直是白痴:大多数情况下,漂亮的程序根本不需要无谓的点缀,工工整整,思路清晰就可以了. </FONT>
<P><FONT color=#0000ff size=2>　　倒是对于Java程序的框架我倒想备忘一下,一个简单的java程序好像是应该是这样的框架 </FONT>
<P><FONT color=#0000ff size=2></FONT><CODE><PRE><FONT color=#0000ff size=2> class ProgramName<BR>{<BR>  public static void main(String[] args)<BR>  {<BR>    file://程序的主体<BR>  }<BR>  public static int othermethod()<BR>  {<BR>   file://其它方法<BR>  }<BR>}</FONT></PRE></CODE>
<P><FONT color=#0000ff size=2>　　整个程序在一个大的类中,这个类的概念应该就跟pascal里面的单元差不多的。同pascal一样,文件名也要与单元名-在这里是类名-一样.Java对大小写要求的非常严格,我语法错了好几次都是因为这个. </FONT>
<P><FONT color=#0000ff size=2>　　Java程序就是由一个或者多个或者很多个方法在这样一个大类当中组成的. </FONT>
<P><FONT color=#0000ff size=2>　　在如上的代码中,定义方法的参数表示的意思分别为: </FONT>
<P><FONT color=#0000ff size=2>　　public表示此成员函数是公有的，可以被其他类直接调用 </FONT>
<P><FONT color=#0000ff size=2>　　static表示main成员函数在ProgramName类的所有对象中是唯一的，Java将为其分配永久存储空间 </FONT></P><img src ="http://www.blogjava.net/dreaminfly/aggbug/2725.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreaminfly/" target="_blank">小毅</a> 2005-04-01 20:18 <a href="http://www.blogjava.net/dreaminfly/archive/2005/04/01/2725.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>快速参考指南</title><link>http://www.blogjava.net/dreaminfly/archive/2005/03/16/2142.html</link><dc:creator>小毅</dc:creator><author>小毅</author><pubDate>Wed, 16 Mar 2005 12:21:00 GMT</pubDate><guid>http://www.blogjava.net/dreaminfly/archive/2005/03/16/2142.html</guid><wfw:comment>http://www.blogjava.net/dreaminfly/comments/2142.html</wfw:comment><comments>http://www.blogjava.net/dreaminfly/archive/2005/03/16/2142.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreaminfly/comments/commentRss/2142.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreaminfly/services/trackbacks/2142.html</trackback:ping><description><![CDATA[<FONT color=#0000ff size=2><STRONG>javax.microedition.lcdui.Display类</STRONG><BR><BR>方法<BR>static Display getDisplay(MIDlet midlet)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;获取Display类的实例<BR>Displayable getCurrent()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 获取目前Displayable类的实例<BR>void setCurrent(Alert alert,Displayable displayable)&nbsp;&nbsp;&nbsp; 显示所指定的报警对话框的实例和被指定Displayable类的实例<BR><BR>void setCurrent(Displayable displayable)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示所指定的Displayable类的实例<BR>&nbsp;<BR>boolean isColor()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 判断设备是否支持彩色<BR><BR>int numColors()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 获取设备能用的色彩位数或灰度<BR><BR>void callSerial(Runnable runnable)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重绘图后，调用Runnable类的实例<BR><BR><STRONG>javax.microedition.lcdui.Displayable类</STRONG><BR><BR>方法<BR>void addCommand(Command command)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将命令关联到Displayabel类的实例<BR><BR>void removecommand (Command command&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;撤消关联<BR>&nbsp;&nbsp;<BR>void setCommandListener (CommandListener commandlistener)&nbsp;&nbsp; 关联CommandListener到Displayable类的实例<BR><BR>boolean isShown ()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 判断Displayable类实例时候在屏幕上显示<BR><BR><STRONG>javax.microedition.lcdui.Command类</STRONG><BR><BR>Command(String label, int commandTYPE, int priority)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 创建Command类的实例，显示指定的标签，设置指定的命令类型和优先级<BR><BR>int getCommandType()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;获取命令的命令类型<BR><BR>String getLabel()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;获取命令的标签<BR><BR>int getPriority()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;获取命令的优先级<BR><BR>javax.microedition.lcdui.CommandListener接口<BR><BR>方法<BR><BR>void commandAction(Command command,Displayable dispalyable)&nbsp; 处理Command类的实例<BR><BR><STRONG>javax.microedition.lcdui.Item类</STRONG><BR><BR>方法<BR>String&nbsp; getLabel()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 获取与Item类的实例关联的标签<BR><BR>void setLabel(String label)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为Item类的实例指定一个标签<BR><BR>javax.microedition.ItemStateListener接口<BR>方法<BR><BR>void itemStateChanged (Item item)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;处理Item类的实例的改变<BR><BR><STRONG>javax.microedition.midlet.MIDlet 类<BR></STRONG><BR>方法<BR>abstract void destroyApp(boolean unconditional)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关闭MIDlet<BR><BR>abstract void pauseApp()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;暂停MIDlet<BR><BR>abstract void startApp()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 激活MIDlet<BR><BR>final void notify Destroyed()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 请求停止MIDlet<BR>final void notifyPause()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 请求暂停MIDlet<BR>final void notifyRequset()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 请求激活MIDlet<BR><BR>final String getAppProperty(string key)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从JAD或JAR文件获取属性<BR><BR><STRONG>javax.microedition.midlet.MIDletStateChangeException类</STRONG><BR><BR>方法<BR>MIDletStateChangeException&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不用测试生成心得MIDletStateChangeException对象<BR><BR>MIDletStateChangeException（String string）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 生成新的带消息的MIDletStateChangeException对象</FONT><img src ="http://www.blogjava.net/dreaminfly/aggbug/2142.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreaminfly/" target="_blank">小毅</a> 2005-03-16 20:21 <a href="http://www.blogjava.net/dreaminfly/archive/2005/03/16/2142.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>手机游戏开发综述</title><link>http://www.blogjava.net/dreaminfly/archive/2005/01/16/345.html</link><dc:creator>小毅</dc:creator><author>小毅</author><pubDate>Sun, 16 Jan 2005 05:01:00 GMT</pubDate><guid>http://www.blogjava.net/dreaminfly/archive/2005/01/16/345.html</guid><wfw:comment>http://www.blogjava.net/dreaminfly/comments/345.html</wfw:comment><comments>http://www.blogjava.net/dreaminfly/archive/2005/01/16/345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dreaminfly/comments/commentRss/345.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dreaminfly/services/trackbacks/345.html</trackback:ping><description><![CDATA[<p><font color="#000080" size="2">手机就是一台网络计算机，基于手机的网络游戏将会成为IT最后的金矿.....&nbsp;<br />一、背景介绍<br /><br />　　现在的移动电话是小型的计算机，它的处理能力与台式机的标准处理能力相比很有限，但是足够运行一个小型的游戏。&nbsp;<br /><br />　　现在的手机的一个特性就是它们还是网络计算机，能够高速发送和接收数字数据。&nbsp;除了语音数据以外，它们还可以发送和接收其它类型的数据。所以类似《传奇》、《千年》这样的网络游戏也可以在手机上实现。<br /><br />　　当然就处理能力和性能而言，当前阶段的支持Java的手机很接近第二代控制台游戏机、80年代中期的家用电脑和早期的手持游戏机。内存通常很有限--一般128KB到500KB--虽然有些智能手机比如Nokia&nbsp;3650有4&nbsp;MB内存。与PC相比，它们的输入和显示功能也很有限；小屏幕（许多仍然是黑白屏幕），为电话拨号优化的小键盘并不针对文本输入，以及有限的声音处理能力。<br /><br />　　二、移动游戏是如何实现的&nbsp;<br /><br />　　目前在移动电话实现游戏的技术主要有以下几种：<br /><br />　　1、嵌入式游戏<br /><br />　　一些游戏在出厂前就固化在芯片中了，象Nokia的贪吃蛇就是一个最著名的例子。但由于用户不能自己安装新的游戏，所以它们逐渐变得不太流行了。<br /><br />　　2、短消息服务游戏<br /><br />　　短信息服务(SMS)被用来从一个手机向另一个手机发送简短的文字信息。用户一般为每条信息支付1毛钱的信息费。短消息服务游戏的玩法通常是发送一条信息到某个号码，这个号码对应游戏供应商的服务器，服务器接收这条消息，执行一些操作然后返回一条带有结果的消息到游戏者的手机中。短消息服务不是一个特别好的用于实现移动游戏的技术，因为它依靠用户输入文字，因此本质上它是一个命令行环境。而且它还很昂贵，即使和服务器只交换10次信息也要花费1块钱或者更多的钱。虽然多媒体消息服务(&nbsp;MMS)技术的推出使得基于消息的游戏更加具有吸引力，但是仍然不是一种重要的游戏环境，所以在此我们不会深入探讨它。<br /><br />　　3、浏览器游戏<br /><br />　　差不多1999年以后出厂的每台手机都有一个无线应用协议(WAP)浏览器。WAP本质上是一个静态浏览载体，非常像一个简化的Web，是为移动电话小型特征和低带宽而专门优化的。要玩WAP游戏的话，可以进入游戏供应商的URL（通常通过移动运营商门户网站的一个链接），下载并浏览一个或多个页面，选择一个菜单或者输入文字，提交数据到服务器，然后浏览更多的页面。WAP&nbsp;(1.x)版本使用独特的标记语言WML，允许用户下载多个页面，即卡片组。新版本的WAP(2.x)使用XHTML的一个子集，一次传递一个页面并且允许更好的控制显示格式。两种版本的WAP都提供一个比SMS更友好的界面，而且更加便宜，只要根据使用时间付费而不是根据信息数。但是它是一个静态的浏览载体；手机本身几乎不需要做任何处理过程，并且所有游戏必须通过网络，所有的操作都是在远程服务器上执行的。手机将继续带有WAP浏览器，而且开发者可能发现WAP有利于传送比游戏应用程序提供的更详细的帮助信息或者规则，因为大部分的游戏仍然受有限的内存制约。然而，WAP没能达到高使用率的目标（在欧洲和北美洲，只有6%的手机使用WAP），而且移动运营商和游戏开发者正在远离WAP技术。&nbsp;我们也不会在这里探究任何WAP的细节。<br /><br />　　4、J2ME和其它的解释语言<br /><br />　　Java&nbsp;2&nbsp;Micro&nbsp;Edition&nbsp;(J2ME)是一种针对移动电话和PDA这样的小型设备的Java语言。大部分的手机厂商都迫切希望Java手机推广应用。上千万的Java手机已经到了消费者的手中。J2ME与台式机中的Java相比还是有很大的限制，但是它已经极大的提高了移动电话支持游戏的能力。它有比SMS或WAP更好控制的界面，允许使用子图形动画，并且可以通过无线网络连接到远程服务器。支持Java的手机的普及，所以它成为目前最好的移动游戏开发环境，我们在这里将详细研究J2ME游戏的开发。J2ME不是手机上配置的唯一的解释语言，但是它是一个许多厂商支持的行业标准。一些专用的解释语言也在某些区域有上佳的表现，如北美的Qualcomm的BREW&nbsp;(&nbsp;Binary&nbsp;Runtime&nbsp;Environment&nbsp;for&nbsp;Wireless，用于无线应用程序的二进制运行环境)和一些韩国移动运营商支持的名为GVM的标准。在这个系列文章中，我们将要重点讨论使用J2ME开发移动游戏，并且将介绍在Nokia平台上开发移动游戏的方法。&nbsp;<br /><br />　　5、C++应用程序或其它编译语言<br /><br />　　另外一种开发方式是使用C++开发移动游戏，把程序编译为本机机器代码。编译语言程序一般说来提供更好的控制用户界面，以及与解释语言相比更快的速度。C++开发者可以定位于Series&nbsp;60平台设备。此外，Microsoft的.Net&nbsp;CF也可以以编译的形式开发移动设备上的游戏，在以后的文章中我将介绍Pocket&nbsp;PC平台上游戏开发的方法。</font></p> <p><font color="#000080" size="2">三、移动游戏开发与传统游戏开发的区别&nbsp;<br /><br />　　移动游戏开发与传统游戏开发区别在许多方面：<br /><br />　　1、开发团队的大小<br /><br />　　传统的PC和控制台游戏一般需要12到30人的开发团队。因为大部分移动游戏规模比控制台游戏小，所以一般情况下只需要3到5人的团队开发，有的时候甚至设计者和编程者是同一个人。<br /><br />　　2、预算<br /><br />　　传统游戏的预算在一百万美元到五百万美元之间。大部分移动游戏的预算则通常少于一百万美元。实际上，移动电话有限的显示能力和对应用程序大小的限制使得不可能象传统游戏那样投入大量的财力物力。从某种意义上来说，这也算是一个优点。<br /><br />　　3、开发周期<br /><br />　　传统的游戏一般要开发两到三年。而大部分移动游戏几月之内就能开发完毕。换句话说，只要有一个小型开发团队和一个小的预算，你就可以开发并推广一个专业品质的移动游戏。因此，对于许多在传统游戏领域遇到挫折的开发者来说，移动游戏开发有很强的吸引力。<br /><br />　　4、网络设备<br /><br />　　移动游戏可能不同于我们之前看到的任何游戏：它受载体因素的限制，但是支持网络并且可多人游戏。用于PC的调制解调器也只是8年前才大范围应用；控制台游戏只不过现在才能上网。移动电话的特性决定它是一种网络设备。即使它们的处理能力使人想起以前的老式计算机技术，但是它们的网络性能却更加出众。<br /><br />　　5、开放标准<br /><br />　　控制台游戏开发需要从控制台游戏厂商取得授权和支持，需要支付给他们"平台使用费"。在无线应用程序世界（如同在PC游戏开发中一样），你可以免费的开发任何款式的游戏，而不要支付Nokia、Sun或其他平台提供商一分钱。此外，这些移动游戏开发平台标准可以向开发者发布、开放并可免费取得。<br /><br />　　6、部署<br /><br />　　传统的游戏主要是在软件市场上购买。而移动游戏主要是由用户从移动门户网站下载并安装。在有些情况下，它们是通过无线网络下载的。有些手机允许你下载一个应用程序到计算机中，然后通过数据线传送到手机中。<br /><br />　　因此，移动游戏的销售渠道是非常不同的。用户一般通过移动运营商的游戏菜单、手机厂商预装在手机中的游戏菜单或者无线应用程序门户网站上找到移动游戏。<br /><br />　　四、载体的优点<br /><br />　　1、庞大的潜在用户群<br /><br />　　现在全球超过十亿部移动电话正在被使用，并且这个数目正在逐渐增加。在除美国之外的每个发达国家，拥有手机的人数比拥有计算机的人数更多。虽然那些手机只有一小部份是支持Java的手机，但是这个数目正在快速地提高并且在几年内Java手机将要成为行业标准。移动游戏潜在的市场比其它任何平台，比如Playstation和GameBoy都要大。<br /><br />　　2、便携性<br /><br />　　GameBoy比任何其他控制台游戏卖出的多的一个原因就是：便携性。人们可以随时随地玩他们选择的游戏。与现在的游戏控制台或者个人电脑相比，手机可能不是一个好的游戏设备，但是人们基本上是随时随刻都把它们带在身边。在他们离开家的时候或者想玩的时候，给开发者应该为他们提供好玩的游戏。<br /><br />　　3、支持网络<br /><br />　　因为移动电话是网络设备，所以可以实现多人游戏，虽然有某些限制因素。</font></p> <p><font color="#000080" size="2">五、载体的缺点<br /><br />　　1、屏幕小<br /><br />　　你面对的是小型的屏幕。虽然屏幕分辩率持续提高，并且彩屏即将成为标准，但是屏幕尺寸还是一直很小，因为没有人乐意拿着砖块一样大的手机。<br /><br />　　还有一个相关的问题：不同的手机的屏幕大小是不同的。比如说Nokia&nbsp;Series&nbsp;60平台设备就提供了和Nokia&nbsp;5100这样的Series&nbsp;40设备不同的屏幕尺寸。虽然各个厂商已经标准化它们产品的屏幕尺寸以避免分割市场，但是开发者仍然需要为不同的电话优化他们的游戏--你肯定想使用特定的手机上所有可用的屏幕空间。<br /><br />　　2、有限的颜色和声音支持<br /><br />　　大部分使用者手中的手机仍然是黑白的，虽然现在出售的支持Java的手机大部分都是彩屏手机。在这些手机中12bit彩色非常流行。<br /><br />　　即使手机本来就有声音设备，但是应用程序播放声音的能力却非常有限。J2ME规范根本不需要硬件厂商支持声音，虽然基本的Java手机允许使用一些声音并且MIDI支持正在成为标准。通常，手机中只有一个语音或者一个声道可用。<br /><br />　　3、应用程序大小限制<br /><br />　　大部分的Java手机只有很少的内存空间用于运行MIDlet。此外，对MIDlet的大小始终有一个限制。实际的限制取决于手机设备和移动运营商的规定。<br /><br />　　在这样的限制条件下设计开发移动游戏固然是非常困难的，但是我们要知道，第一台家用电脑只有64&nbsp;KB内存，但是仍然有人热衷于在其上开发游戏软件。在一些智能手机上内存的限制就少一些，比如Nokia&nbsp;3650甚至可以运行几兆字节的应用程序。<br /><br />　　4、高等待时间<br /><br />　　等待时间----机器发出请求和接到响应之间所花费的时间----在计算机上是以微秒计算；在有线因特网上是以毫秒计算；而在无线网络则要以秒计算。<br /><br />　　等待时间是网络游戏中一直存在的一个问题，开发者们总是在努力消除它带来的问题。无线网络等待时间非常长，这就不可能有效的开发多人快速动作移动游戏。然而基于回合制的多人游戏是相当可行的，我们在后面的文章中将讨论如何使用各种方法来处理这个问题。<br /><br />　　虽然移动运营商总是在努力增加移动电话可用的带宽，但是他们却没有把降低等待时间当成首要解决的问题，因为它对于别的应用程序并不重要。<br /><br />　　还有一种特殊情况：使用蓝牙技术或其他无线局域网技术的手机可以和附近的蓝牙设备使用因特网等待时间（一般200-400毫秒）通讯。这样，使用像Nokia&nbsp;3650这样的智能手机，你就可以和附近的移动用户一起玩多人快速动作游戏了。<br /><br />　　5、可中断性是关键<br /><br />　　当用户接听电话的时候，手机都会中断进行中的游戏。游戏程序必须能够暂停并且继续，而且不会造成游戏问题（例如，游戏者在打电话的时候老怪仍然在移动，打死玩家扮演的角色，导致输掉游戏）并且不会造成内存溢出。这需要在编程的时候多注意，Nokia提供了技术文档帮助J2ME和Symbian&nbsp;C++开发者了解并解决这个问题。<br /><br />　　6、正在发展的技术<br /><br />　　用于开发移动游戏的技术并不是针对游戏设计的，因此常常有特定的限制条件。例如，J2ME规范不需要支持透明度，这就使得子图形除了在空白的背景上以外，在任何背景上都会很难看。<br /><br />　　幸运的是，大部分设备厂商的Java手机都补充了J2ME，支持了透明度。为了充分利用J2ME的性能，你需要支持手机特定的API；为了得到最好的效果，就需要为一个游戏编写好几个版本。最近发行的MIDP&nbsp;2.0规范解决了一些此类问题，但是对不兼容MIDP&nbsp;2.0的手机是无效的。 <br /></font></p> <p><font color="#000080" size="2">六、避其短处&nbsp;取其长处<br /><br />　　游戏有惊人的可塑性；它们可以使用从石器时代到现代高科技的每一种技术来实现。每当你使用你以前从来没有使用过的技术进行开发的时候，你需要了解它的性能和局限，努力把它的性能发挥到极限，同时回避或者解决它的局限性。<br /><br />　　我们可以从我们的移动游戏的性能和局限性的讨论中得出什么结论呢？<br /><br />　　1、短的游戏时间<br /><br />　　人们迟早要打电话或者接电话，并且他们不想把所有的电量都用来玩游戏。理想的情况是每一回合游戏应该保持在五个分钟或更短时间之内。这不意味着一个完整的游戏必须在五分钟之内结束--而是你应该允许游戏者中断、保存和继续游戏。<br /><br />　　2、玩家有自己的时间表，而不是必须遵循你的时间表<br /><br />　　让人们在想要玩游戏的时候玩，不要强迫他们等待（如果你可以避免），也不要要求他们在任何时间都在游戏中。<br /><br />　　3、避免等待时间<br /><br />　　这对单人游戏来说很容易实现。在多人游戏中，你就需要解决等待时间的问题了。（我们将在后面讨论这个问题。)<br /><br />　　4、使用网络<br /><br />　　网络不一定对于每个移动游戏都是必需的，但是那种与人竞争的感觉，即使只有一个排行榜，也能吸引更多的游戏者。要记住，手机实际上是一种社会性设备，添加某种社会性因素到你的游戏中会使它更加受欢迎。<br /><br />　　5、尽可能地让游戏保持小型<br /><br />　　记住一点，人们仍然热中于80年代的优秀的游戏。在某些方面，技术的限制强迫你把更多的注意力放到基本的游戏中去。<br /><br />　　当我们在后续文章中探讨开发的时候，我们将讨论一些技术问题。<br /><br />　　6、做好支持多种手机的准备<br /><br />　　至少，需要支持不同的屏幕尺寸，这对Nokia系列手机很容易做到。为Series&nbsp;40开发一种版本，为Series&nbsp;60开发另一种版本。多数情况下，你还要利用特定手机的性能和API，比如Nokia的用户界面和SMS&nbsp;API，你要为不具备相同特性的手机开发不同的版本。<br /><br />　　7、为国际化做好准备<br /><br />　　全世界都在使用移动电话，每一种语言都有自己的市场。在你开发的时候你就要做好计划，以便更利于本地化。</font></p> <p><font color="#000080" size="2">七、处理等待时间<br /><br />　　移动游戏如何解决无线网络的高等待时间呢？<br /><br />　　1、单人游戏<br /><br />　　游戏者的游戏不需要用到网络，除非是把高分传送到排行榜中，或允许游戏者浏览排行榜。这种网络通讯对于游戏影响不大，几秒钟的延迟不会引起用户的反感。<br /><br />　　实质上，在大多数的单人游戏中并没有这个问题。<br /><br />　　2、"多玩家"单人游戏<br /><br />　　在一个"多玩家"单人游戏中，游戏者感觉他们是在玩一个多人游戏，但是事实上，每个人只是面对相同的游戏，在游戏或者回合结束时比较分数。<br /><br />　　当一个游戏者加入游戏时，他告诉其他游戏者他的ID号，然后开始玩单人游戏。服务器要么给每个游戏者发送一个包含相同消息的游戏状态文件，要么发送一个来自构造启动游戏状态的客户软件的代码。每个游戏者玩游戏，设法取得最高的得分。当一个游戏者结束游戏后，他的客户端程序把他的得分提交到服务器。当所有的游戏者都完成游戏后（或者超过某个时间以后），服务器告诉每个游戏者谁取得了最高分，以及每个游戏者取得的分数。<br /><br />　　这种风格的游戏在因特网上相当成功；AOL最受欢迎的游戏Slingo就是一个很好的例子。<br /><br />　　因为只有在服务器开始或者结束游戏的时候才需要交换消息，所以等待时间只有在这些时候才成为一个问题。<br /><br />　　3、基于回合的游戏<br /><br />　　在一个基于回合的游戏中，游戏者进入他们的回合，并在接收结果之前需要等待一段时间。几秒钟的延迟是可以容忍的。<br /><br />　　有两种基于回合的游戏：<br /><br />　　3.1、轮流游戏<br /><br />　　在一个轮流游戏中，每个游戏者按次序进入回合。像象棋、红心大战这样的经典游戏就是很好的例子。<br />这种游戏的缺点就是游戏者在重新进入回合之前无事可做。虽然经典游戏在因特网上有很多玩家，但这多多少少有点无趣，。<br /><br />　　因此，限制轮流游戏的游戏者数是个非常好的主意，这样延迟就不会变得非常长。两到四个游戏者是比较理想的情况。<br /><br />　　3.2、同时动作游戏<br /><br />　　在一个同时动作游戏中，每个游戏者独立于其它游戏者计划他自己的行动。当一个游戏者就绪时，他发送指令到服务器。服务器等到从所有的游戏者那里都接到指令，然后分解回合，再把结果发送到所有的游戏者那里。<br /><br />　　4、"即时动作"游戏<br /><br />　　在一个"即时动作"游戏中，游戏可能会持续很长时间（几天、几个星期、几个月甚至到永远）。游戏者可以在任何时候进入游戏，执行游戏中的动作。在一些游戏中，他们可能只能与其他的同时进入游戏的用户交互；在其它的游戏中，他们也许能与任何其他游戏者交互，即使这些游戏者已经下线。<br /><br />　　6、把等待时间分布到游戏中<br /><br />　　让游戏者接受高等待时间的另一种简单方法就是把等待时间分布到游戏本身中。例如，大部分星际飞船战斗游戏让人都感觉到象是二次大战时的空战，战船在你身边呼啸而过，向你开炮。然而，在手机上要实现这种火爆的场面好像困难很大。我们可以换一种思路，我们可以把星际战舰类游戏做成一个类似第一次世界大战海战的游戏，星际飞船慢慢地移动，彼此之间一发一发的发射炮弹，导弹缓慢的移动奔向它们的目标。你可以使用这种方法来隐藏几秒钟的等待时间。肯定还有更多的解决长等待时间的方法。这是一个值得花时间去思考解决的问题。<br /><br /><br /><br /><br /><br /></font></p><img src ="http://www.blogjava.net/dreaminfly/aggbug/345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dreaminfly/" target="_blank">小毅</a> 2005-01-16 13:01 <a href="http://www.blogjava.net/dreaminfly/archive/2005/01/16/345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>