📄 tutorial.html
字号:
</p>
<p>
“键码转换”也是一项非常实用的功能,也是JavaMagic的一大特色。如果您的游戏<b>采用的是Nokia的键位</b>,而不幸您的手机的键位与Nokia的不一致,现在可以不必再为此郁闷,使用JavaMagic即可轻松搞定。不过之前需要做一个工作,就是知道自己手机的键码(KeyCode)。我在网上找到一款简单的按键测试程序
,把它转载到了JavaMagic的主页上(<a href="http://ohfaint.3322.org/javamagic/KeyTest1.jad">jad</a>
<a href="http://ohfaint.3322.org/javamagic/KeyTest1.jar">jar</a>)。在手机上运行,按下按键即可看到该键对应的KeyCode。如图:</p>
<p align="center"><img border="0" src="tut_images/KeyTest.gif" width="220" height="468"></p>
<p> 记下手机上所有按键的KeyCode。注意,如果你按下某个键没反应,不必担心,因为<b>并非每个按键都会有KeyCode</b>。</p>
<p> 回到JavaMagic,点击“键码设置”:</p>
<p align="center">
<img border="0" src="tut_images/KeyCodeConfig.gif" width="452" height="282"></p>
<p> 由于数字键、[*]、[#]键的KeyCode在每台手机上都是一样的,因此这里只提供了"上" "下" "左" "右" "选择/确认" "左软键"
"右软键"等键的转换。在这里填入您手机上对应键的KeyCode即可。如图,假如我的手机的"上" "下" "左" "右" "选择/确认"几个键的KeyCode分别是1,
6, 2, 5, 20,将它们填到相应位置里,而手机上的左右软键是没有KeyCode的(真的存在这么变态的手机,不骗你),想用[*]和[#]代替左右软键,则应将[*]和[#]的KeyCode(42,
35)分别填入Left-Softkey和Right-Softkey的框中。填好后按确认即可。</p>
<p> 为方便他人,希望大家能把自己测试得到的键值保存为文件,并点击“下载/上传键值文件”将键值放到网上共享。</p>
<p> 点击“默认值”可以将键值回复到默认的值。这个默认值也是可以自行指定的,只需要将键值以 "KeyDefault.xml"为文件名保存,并与JavaMagic.exe放在同一文件夹下即可。</p>
<p>
在“键码转换”中,还可以指定"选择/确认"键的功能。比如某些游戏中这个键本身是没有功能的,用上下左右移动后,还要把手指伸到左软键上按确认。如果你像我一样懒,可以将"选择/确认"键定义为左软键,这一在游戏中操作起来就方便多了。</p>
<p> 注意,出于软件易用性考虑,<b>JavaMagic只提供其它手机键位->Nokia式键位的转换</b>。如果您要处理的游戏本身使用的键位不是Nokia式的,建议您将游戏交与专业人士处理。当然,自行处理的方法还是有的,但涉及Java编程,因此不在此讨论。</p>
<p> </p>
<p> “Manifest与Jad选项”可能也会让某些人感到迷惑。其实这里的选项也与兼容性有关。</p>
<p> 先说说Manifest是什么。在每个jar文件中,都会有一个meta-inf目录。在meta-inf目录下,都有一个manifest.mf文件。
这跟从前有座山山里有座庙庙里有个叫manifest.mf的和尚的原理是一样的。这个和尚满脸字符,是一个文本文件,可以用记事本打开看看它具体长成啥样。文件包含了一些属性信息,它每行的格式基本上都是xxxx:
xxxxxxxx,冒号前面的字符串为属性的名字,后面为属性的值。例如 "MIDlet-Name: Golf"就表示MIDlet-Name这个属性的值为Golf。</p>
<p> 嗯,其实我们不需要知道这么详细,只需要了解一个事实就可以了。那就是,
如果manifest.mf里某些属性的值写得比较不好看,或者用了中文和一些奇怪的符号,会直接导致某些软件和手机拒绝承认它所在的jar文件是一个正常的java包。因此,就有了“Manifest过滤”一说。
过滤选项就是用于设定是否对manifest.mf文件及生成的jad文件内容进行过滤,当开启过滤功能就能把多余的属性和可能不兼容的字符过滤掉。</p>
<p> 至于jad文件,它一般都是与jar文件一起出现的,其内容与manifest.mf文件差不多。对于某些手机和软件来说,它不是必须的,只要有jar文件就够了,但对于大多数手机和软件,没它jar文件就活不下去,所以这个世界上才会出现那个叫<a href="http://www.google.com/search?hl=zh-CN&newwindow=1&q=jadgen&lr=" target="_blank">jadgen</a>的小程序。比如我的这款手机,单独传入jar文件时也能跑,但就是不能保存进度。即使传入jad文件,如果里面的某些属性是中文,看起来也没啥问题,但仍然还是不能保存进度。一定要同时传入一个相貌平凡的jad文件它才能正常保存进度,十分恶心。所以
,针对这些恶心的手机,JavaMagic中设计了这些跟manifest和jad有关的功能:</p>
<p> “过滤Manifest中的属性”就是用来对manifest.mf文件中的属性项进行过滤的。它有三种设置状态(不选,选择和半选择):不选表示不进行任何过滤;选择表示仅保留最基本的几个属性,并将多余的属性过滤掉,同时替换掉某些属性("MicroEdition-Configuration",
"MIDlet-Version", "MicroEdition-Profile"及"Manifest-Version")的值,以避免这些值写得不标准造成jar无法载入的错误;半选择状态则表示仅对那些属性的值进行替换,不过滤任何属性。一般建议置于半选择状态,因为那些“多余”的属性,往往会在游戏中使用到,<b>有的游戏运行时需要manifest.mf中特定的属性,过滤后可能会造成部分游戏无法运行</b>。(如一款叫wax的游戏。)
。只有jar无法识别或载入时才应尝试进行完全过滤。</p>
<p> “对Manifest中的属性值进行字符过滤”则是针对属性的具体值进行过滤。某些属性的值如果含有特殊的符号(如"*",
"\"等)或中文符号(有的手机和软件不支持含有中文字符的manifest文件),同样会造成jar无法识别或者别的兼容性问题。这个选项也有三种设置状态:不选表示不进行任何过滤;选择表示对所有属性的值都进行字符过滤;半选择表示仅对基本的几个属性("MIDlet-1",
"MIDlet-Name", "MIDlet-Vendor")的值进行字符过滤。如果您的手机很健壮,对于那些特殊字符和中文字符不会有不良反应,就不必选择此项;如果您的手机只对于某些属性的值比较敏感,就请将其设置为半选择状态;如果您的手机对中文支持较差,请设置为选择状态。至于怎么设置比较适合您,就要靠经验了。</p>
<p> 需要注意的是,虽然经过数次改进,这个过滤功能目前仍然十分不完善,可能会在某些情况下出现异常。</p>
<p> 另外,无论是否开启了过滤功能,JavaMagic都会自动加上<i>MIDlet-Icon </i>
属性。因为有的手机需要该属性才能在程序管理器中正确显示Java游戏的图标。</p>
<p> “生成主jad文件”用于生成一个与处理后的jar文件同名的jad文件,省去了另外找工具生成jad文件的麻烦。如果您的手机不需要jad文件,可以不选此项。</p>
<p> “生成第二jad文件”用于生成一个jad文件的副本,这个文件的文件名中会含有游戏名等附加信息。这个功能可以帮助用户识别不同的游戏。例如,我们在网上下载的游戏可能是
"20040605225854.jar"这种文件名,从文件名上完全看不出是什么游戏。使用“生成第二jad文件”功能,转换后除了生成"20040605225854_new.jad",还会生成一个
"20040605225854[游戏名]_new.jad"这种文件名格式的jad文件。如果同时开启了jar自动改名功能,还可能在"[游戏名]"后加上"[原文件名]"。
此外,还会加上[ArFnNx]之类的标志,其具体含义可以查看该选项的注释。例如有"N"标志的表示这是一个Nokia游戏;有"Nx"标志的表示这是一个运行起来可能慢得像幻灯片的Nokia游戏:)</p>
<p> 用户可以选择只保留主jad文件,只保留第二jad文件,或者两个jad文件都保留,或者两个jad文件都干掉。由于第二jad文件文件名中可能包含中文字符,且于jar文件文件名不一致,并不是所有的软件和设备都支持这种文件名的jad文件,所以进行了这样的设置。用户可根据实际情况和需要进行设置。</p>
<p> </p>
<p>
“jar大小警告”可以提示您生成的jar文件是否超过您的手机所允许的最大长度。在“jar文件最大大小(字节数)”旁边的编辑框输出以字节为单位的最大文件长度,当生成的jar文件超过此长度时候就会在讯息框给出一个警告。如果您不需要此功能,或者您不知道您的手机最大支持多大的jar文件,可在此填入0。</p>
<p>
“超过此大小时放弃处理”选项则表示当填入了非0值时,生成的jar文件的大小如果超过了这个值,不但会给出警告,还会放弃处理该文件,将其视为“处理失败”。使用此功能可帮您“过滤”掉体积过大的jar文件,以节省您的宝贵时间。</p>
<p> </p>
<p> “其它”一栏中可以对JavaMagic的行为进行一些设置:</p>
<p> “仅显示摘要”用于设定是否显示详细的分析过程。</p>
<p> “输出到子文件夹”用于设定输出文件与源文件处于同一文件夹还是放在子文件夹中。</p>
<p>
“jar中文文件名自动改名”同样是为解决中文字符的兼容问题而设置的。很多软件及设备对中文文件名兼容性不好,使用中文文件名的jar文件可能会识别不了。但有时我们在网上下载的jar文件会使用中文文件名,这时这个选项就比较有用了。启用该选项后,文件名中的中文字符会被自动转换为拼音声母,例如对于文件
"foo测试bar.jar",转换后生成的文件名文件名将为 "fooCSbar_new.jar"。</p>
<p>
“用WinRAR压缩jar”用于解决默认压缩引擎带来的小问题。JavaMagic采用了压缩率较高的kzip对游戏重新压缩,因此<b>新生成的文件可能比原文件小</b>。但在测试过程中我发现极少数的游戏会
出现异常(如EonTheDragon的几个版本,Quest Craft等游戏),在设置中选择“用WinRAR压缩jar”,重新对游戏进行处理,一般都能解决问题。但对于大多数游戏,JavaMagic应该都是能正常工作的。</p>
<p>
如果系统中正确安装了WinRAR,JavaMagic能够自动定位winrar.exe的位置。将鼠标悬停在“WinRAR位置”按键上即可看到当前设置的winrar.exe位置。如果不对,请点击该按键自行指定。当使用WinRAR压缩时,采用的是最高压缩比的设置,以尽量减少生成的jar文件的体积。</p>
<p> “转换结束后提示”用于设置在完成转换后是否发出提示音及在任务栏闪烁窗口标题以提示用户。</p>
<p> “窗口一直置于前方”让JavaMagic的窗口置于所有窗口最前方(On top),以方便操作。</p>
<p> “将设置保存到文件而不是注册表”可以选择将JavaMagic的设置保存保存在哪里。默认是将设置保存在注册表。如果想保存注册表干净,请选择此项;但如果觉得JavaMagic.cfg这个文件看着碍眼,那么请不要选择此项。</p>
<p>
其中“仅显示摘要”、“输出到子文件夹”及“过滤Manifest属性及字符”“jar中文文件名自动改名”有三种设置状态(不选,选择和半选)。当设置于第三态时,“仅显示摘要”表示转换单个游戏时显示详细分析过程,转换多个游戏时仅显示摘要;“输出到子文件夹”表示转换单个游戏时输出文件与原游戏在统一文件夹下,转换多个游戏时才输出到子文件夹。</p>
<p> 根据您的需要设置好JavaMagic后,点击“保存”,现在您可以使用它对您的游戏进行处理了。您可以点击“处理jar”选择要处理的游戏,或者将游戏直接拖放到JavaMagic主窗口上。此外,在没启动JavaMagic的时候,您也可以像使用jadgen那样,将游戏直接拖到JavaMagic的图标上进行转换。不必担心把其它类型的文件拖了进去,JavaMagic会自动识别,只对jar文件进行处理。</p>
<p align="center"><img border="0" src="tut_images/Converting.gif" width="627" height="442"></p>
<p> 在处理过程中可以在信息框中看到分析和转换结果,下面是正在处理的文件和当前进度。转换过程中无法退出,需要先点击“中止”或按[Esc]键中断处理过程(会在<b>当前游戏转换结束后,下一个游戏开始转换前</b>提示是否中止)。虽然JavaMagic的处理上限是每次1024个文件,但因为处理速度比较慢,<b>一般不建议一次处理过多的文件</b>,以免使您精神焦虑和烦躁。每个游戏顺利处理完毕后会有</p>
<table border="0" width="300" id="table1" bgcolor="#CCCCCC" align="center">
<tr>
<td><font face="Tahoma" size="2">转换完成。请使用以下文件:<br>
D:\Java\foo\JavaMagic_out\bar_new.jar</font></td>
</tr>
</table>
<p>这样的提示,并会自动生成对应的jad文件。现在您可以将新生成的游戏传入您的手机中进行测试了。有条件的话最好先用模拟器测试,如果发现有问题可能需要修改JavaMagic的相关设置重新进行处理。</p>
<p>
正如上面所说,同样的设置不是对所有的游戏都适用。很多时候都需要针对个别游戏修改设置,重新对游戏进行处理。比如,我的手机屏幕是128x160的,全屏选项那里用的是“仅当游戏可能能自动适应屏幕高度时全屏”,但有的游戏只是在部分场合会适应全屏分辨率,大多数情况下都是只用到128x128的区域。这时我就要将设置改为为“不强制使用全屏模式”,“不对分辨率进行指定”,重新对游戏进行处理。</p>
<p> 还有,如果游戏经过处理后不能正常工作,可以尝试用FullJava处理,如果FullJava处理过的游戏正常,则很可能是JavaMagic的某些设置造成游戏不正常。您可以尝试选择“用WinRAR压缩jar”,并修改“Manifest与Jad选项”中两个过滤选项的设置,重新对游戏进行处理。如果仍然有问题,欢迎向我报告。</p>
<p> 目前JavaMagic仍然不够完善,也没进行太多的测试。而且我使用的测试环境主要是Alcatel的Java模拟器,其行为可能会与其它品牌手机的Java虚拟机不一致。如果您在使用过程中发现了什么问题,欢迎通过JavaMagic主页的留言簿或E-mail告诉我。JavaMagic的主页是:</p>
<p align="center"><a href="http://ohfaint.3322.org/javamagic">
http://ohfaint.3322.org/javamagic</a></p>
<p> 最后,感谢“手机游戏修改群”里的朋友们的支持与鼓励!</p>
<hr>
<p><font color="#FF0000">本文档更新历史:</font></p>
<p>Rev 1.0: 09/21/2005 - 第一版</p>
<p>Rev 1.1: 09/29/2005 - 针对JavaMagic 0.52 beta进行修正</p>
<p>Rev 1.2: 10/09/2005 - 修改了“分辨率”部分的内容;针对JavaMagic 0.53 beta进行修正</p>
<p> </p>
<p> </td>
</tr>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -