登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> 程序员学前班[不再更新,只读] >> 主题: kjava/j2me 陷井日志     [回主站]     [分站链接]
标题
kjava/j2me 陷井日志
guest
浏览(0) + 2007-11-07 16:04:54 发表 编辑
给本帖添加超大文件下载链接

关键字:

一机型的"死机"现象,我仔细查看了一下,其实表现为不响应上下键.但2,4,6,8可以响应,并作为了方向键,那显示是键盘处理的问题而不是死机了.

解决方法为在
protected void keyPressed(int keyCode)

事件中为 keyCode 加上一个 getGameAction() 处理,例如:

int key = getGameAction(keyCode);
//key = getKeyCode(getGameAction(keyCode));
if (key == Canvas.DOWN)
{
setFocusNext();
return;
}

guest
2007-11-7 16:12:44 发表 编辑

int getGameAction(int keyCode)

根据手机游戏设置的按键取得game action码。

public int getKeyCode(int gameAction)

根据手机游戏的game Action取得对应的按键代码。

guest
2007-11-8 12:04:47 发表 编辑

上下左右的键值居然是不一样的,晕倒了. 实际上 kjava 是做不以通用的了,好象是说一般以 nokia 的为准.

来自 http://bbs.sj84.com/viewthread.php?tid=33894

手机游戏修改资料小全,有需要的看看

玩了很多游戏,很多按键存在问题,本来可以完美运行的游戏就因为差一两个键就无法玩下去了,实在是郁闷,最近一直在研究修改按键,有一点心得,写出来给大家看看吧。希望对大家有用。
首先需要准备以下软件:
JAVA反编译软件(推荐小颖Java源代码反编译专家)
十六进制编辑器(推荐HexWorkS)
另外WINRAR也必不可少
然后就可以开始了
首先确信你需要修改的游戏在小5上能够正确运行,但是按键存在问题,一般情况下是左右软键有问题,左软键对应小5的下软键,右软件直接没有。原因是因为大部分游戏是根据NOKIA手机的按键制作的,而N机的左右软键的键值和小5的不一样,而一般数字键基本上每个手机都是一样的键值,N机的左右软键键值为:左软-6;右软-7。其他通用的键值如下:
按键 按键代码 按键代码的数值
0 KEY_NUM0 48
1 KEY_NUM1 49
2 KEY_NUM2 50
3 KEY_NUM3 51
4 KEY_NUM4 52
5 KEY_NUM5 53
6 KEY_NUM6 54
7 KEY_NUM7 55
8 KEY_NUM8 56
9 KEY_NUM9 57
* KEY_STAR 42
# KEY_POUND 35
好,明白原因了就可以开始做了
以傲世奇侠1来做例子 此主题相关文件 ,首先用WINRAR把该文件解压,得到以下文件:
112959

然后用反编译软件将其中的原代码提取出来得到:
112960
然后就可以挨个文件查看原代码,对于我们,需要的是找到判断按键的函数:keyPressed、keyRepeated、keyReleased这几个,然后修改键值。
利用记事本打开各个文件查看,如果嫌麻烦,可以利用记事本的查找功能,搜索关键字keyPressed
112961
最后在g.java文件成功找到我们需要修改的地方:
112962
接下来就对应g.class文件进行修改,(可以不用编译JAVA文件生成类文件了,直接修改class文件)用HexWorkS打开g.class
112963
然后查找FA字节,为什么要查找FA呢,因为NOKIA游戏左右软键的键值编译完之后一般为FA、F9(IF语句)和FFFFFFFA、FFFFFFF9(CASE语句)。这里的原文件是IF语句,所以我们查找对应的FA和F9语句,找到后把FA改成2A(对应*键)把F9改成23(对应#键)
112971
当然我们需要一个一个的修改,修改完后存档并即时反编译这个class文件看原代码,看看能否得到我们需要的效果。看,刚刚查到的那个FA修改后,得到了我们所期待的效果
112972
接下来就继续修改,知道把-6改成42,-7改成35
112973
这个过程需要反复实验,因为并不一定找到的FA和F9就是我们所需要修改的地方,然后保存这个改好的g.class文件,最后一步就是将这个文件拖到原JAD里面(用WINRAR)覆盖原文件。就算是大功告成了。这个方法不用再编译JAVA程序,直接修改CLASS文件,相对比较简单,但是不一定适用每个游戏,不过都可以试试。
======================
第一步 准备软件并全部安装
1.破解软件(fulljava1.5)
2.moto模拟器(sdk)
3.反编译软件(小颖java1.4标准版)
4.十六进制修改软件(HWorkS32)
5.解压缩软件(winrar)
第二步 使用破解软件破解nokia程序
1.打开fulljava1.5,在选项中 增加nokia兼容性class 前面打勾 将canvas分辨率 设置为
宽128高116,确定后打开33.jar(待修改的**.jar文件),提示成功后进行下一步
2.用moto模拟器先运行一下 能够运行的话进行下一步
3.用winrar将待修改的**.jar文件释放出来,我释放到了 c:\java\33(目录可根据自己情况建立,名称位置无所谓)
4.打开反编译软件(小颖java1.4标准版)操作文件夹选择 c:\java\33、输出文件夹选择c:\java ,单击 开始反编译按钮,提示反编译成功后进行下一步
5.打开c:\java 目录分别察看目录中的**.java文件(**.class文件反编译后的代码文件)逐一搜索keypress关键字 找到后分析含有==-6、==-7的代码位置,这就是需要修改的左右软键值的位置。此游戏中只有a.class文件中有 if(k == -6)、 if(k == -7)两个位置。
(分析代码,分析出-6、-7这2个需要修改的左右软键值的位置。有些游戏在多个CLASS文件中包含-6、-7的值,因此需要逐一修改。一般常见的判断语句有 case -6 及 if (i1 == -6))
6.运行十六进制修改软件(HWorkS32)打开需要修改的**.class文件(此游戏只有a.class文件),搜索FAA0找到后将其改为 EBA0,再搜索F9A0找到后将其改为 EAA0,
修改成功后保存文件,提示备份时别忘了点是。
( if (k == -6)对应的十六进制值 FAA0,if (k == -7)为F9A0; case -6,对应的十六进制值FFFFFFFA, case -7对应的一般FFFFFFF9但是有时会有特殊情况;-6在16进制中表现为FA,-7为F9,-21为EB,-22为EA)
7.用winrar打来**.jar文件,将已修改的a.class文件替换掉原文件。
第三步 享受成果
用moto模拟器再运行一下,欣赏一下自己的劳动成果
注意:如果修改的键在模拟器上可能无效,建议传到手机上试试。
==================================
有了移动就有了箱子,箱子里东西虽多虽好,可是都是以NOKIA S40的居多,那么其他手机用户就只能干巴巴的看了吗?
当然不是,有政策必有对策,不过要玩S40的游戏,首先你必须有一部比S40的JAVA功能更强的手机以保持兼容性。这里推荐一下MOTO的MIDP2.0系列,MOTO的手机以时尚娱乐定位,价格低廉功能较强,屏幕和系统速度都不错。低端直板的可以选择C系列,翻盖的V18X、V22X;中高端的直板E、翻盖V系列都属于此列。
当然,你还得保持自己的手机屏幕标准至少有128*128。
STEP1 破解NOKIA游戏
这个大家都知道了,将网上流传的COM文件包(内含class文件)拖进JAR压缩包内就可以了,不过正由于拖进了这个COM包,所以游戏体积会稍大,所以,这就是我们之前强调兼容性的问题,JAVA程序至少得支持到70K哦~
用模拟器运行一下游戏看看,是不是可以了呢?呵呵,当然,不是所有的S40游戏都可以这样破解,但是90%没有问题。
PS:索爱的游戏也能破解,方法雷同
STEP2 全屏
游戏运行是可以了,但是最下方通常会被菜单栏所挡住(MOTO、三星均有此问题,其他机型未知),少了一大块啊。
以MOTO为例,使用FULLJAVA工具,就能进行全屏的破解(俄罗斯人的强悍工具…),还能自动生成JAD,以及上一步的class文件也能一并加入,只要这一个工具,简单的一拖,我们就能完成了2步的工作,真是方便快捷
在用模拟器运行看看,下面的菜单栏没有了吧~这样一来,大部分的射击、动作游戏在这一步就算是破解完成了~超级easy吧
STEP 3 修改
可是情景类游戏(箱子上这么分……无语),例如RPG、SLG、TAB等操作比较复杂,而且多用到左右软键,这下拿到别的平台上就失效了……左右软键是箱子的那些供应商们最喜欢设置功能的键,汗,所以我不得不再佩服一下国外游戏的兼容性,多用#键确认,数字0键取消。
这里简单讲一下按键失效的原理:
每个手机的按键差不多,但是自己的键值(KEYCODE)却差很多。以MOTO和NOKIA的为例子作比较:
MOTO C系列 NOKIA
左软键 -21 -6
右软键 -22 -7
中键 -20 -5
拨号键 -10 -10
方向下 -6 -2
数字键盘 2者相同
这里仅举这么多,可以看到,完全不同的键值,游戏设计在在编制S40的游戏程序时,如果将键值设定为了-6、-7,那么就不能顺利的运行在其他平台上了……而且从上表可以看到,MOTO的下方向键和NOKIA的左软键的键值相同,这就是为什么许多S40游戏破解后按下就会变成确定的原因。
一些射击和动作类的游戏没有方向上的困难是因为使用了getgameaction()的方法,这样得出来的结果在各种机型上基本都是相同的,所以保持了其兼容型,为了帮助消化,这次先不作详述了。
Part 2
游戏可以修改的东西很多,例如:
键位
屏幕尺寸
屏幕定位
字体格式(MOTO大部分中低端机只有内置一种字体,所以改了也是白改)
等等,这一次我们讲如何来修改基本的键值,最实用。首先我们必须要准备好工具。
NOKIA 7210模拟器:这个无所谓有没有,但是为了能更好的了解游戏原按键的功能,最好装一个。
MOTO SDK4.3 模拟器,目录内的DOCS文件夹内有大量API资料,是曰后查阅所需。
Java 2 Runtime Environment 1.4.2 JAVA虚拟机,运行MOTO模拟器前必须安装。
JAVA反编译器:网上搜索一下很多,我用的是小颖反编译引擎
16进制编辑软件:例如Ultra edit等,随便哪个,根据自己喜好就可以。我用的是HexWorkshop
上一次我们已经讲了键值的原理,这次就来修改。先安装完上述所有软件,安装中遇到问题请网上翻阅各种资料,尤其是注意配置JAVA虚拟机的路径。
步骤1:
用FULLJAVA将S40游戏给全屏并破解,注意建议选择128*116尺寸
步骤2:
用MOTO模拟器运行是否可行,注意如果不可运行的问题有多种多样,本节不做探讨。
步骤3:
解开JAR文件,里面有一堆CLASS文件,有了反编译工具,就能查看源代码了。逐一寻找,搜索keypress关键字。找到后开始代码分析
步骤4:代码分析
这是比较难的一步,没有一个统一的办法。要求有比较好的流程概念和一定的编程基础。分析代码,分析出-6、-7这2个需要修改的左右软键值的位置。有些游戏在多个CLASS文件中包含-6、-7的值,因此需要逐一修改。一般常见的判断语句有 case -6 及 if (i1 == -6)。初次修改建议找 if(i1 == -6)这种方式来修改
步骤5:修改
用16进制编辑软件打开所需要修改的CLASS文件(注意是改.class,不是改.java)
找到-6和-7(NOKIA的左右软键值),分别修改成为-21和-22(C650的左右软键值)
-6在16进制中表现为FA,-7为F9
此时观察对比源代码,如果是 case -6,那么就搜索FFFFFFFA;如果是if (i1 == -6),则搜索FAA0。
运气好的话一下就可以搜索到修改点了,如果出现多个,则需要比对哪个才是真正需要改的。可根据源代码附近的数字的值和16进制文件来比较。
将FA改为EB(就是-21),将FB改为EA(就是-22)。当然你也可以修改到自己喜欢的键位(比方说*或者#等)注意如果是FFFFFFFA,要将FA(-6)改成正数的话,则要将前面的FFFFFF改成000000。例如将-6改成21则就是00000015(16进制)。
然后保存。反编译修改后的CLASS文件,看看是否修改成功。
成功后将修改的CLASS文件拖入原JAR的压缩包中,重新用模拟器进行测试。
步骤6:测试
注意,C650的模拟器是有BUG的。左右软键未必在模拟器上有效(这个原因这里不多讲了,下次再谈)。所以必须要到真机上去测试,但是一次次下载到手机很麻烦。若没有信心可以先不将-6的值改到-21,可以改成别的。
基本上这样一个流程就完成了,各位MOTO的朋友们快来试试吧~
PS:有一些游戏在编译中混淆了代码,或者制造一些伪指令,这类在修改时会比较麻烦。所以不是所有的游戏都可以修改.
MOTO C650与NOKIA S40 按键KEYCODE对照表
moto nokia

左键: -21 -6
右键: -22 -7
中键: -20 -5
菜单键: -23 --
拨号键: -10 -10
挂机键: ?? -11
左方: -2 -3
右方: -5 -4
上方: -1 -1
下方: -6 -2
-------------------------
以下2者皆相同:
数字0~9键:48~57
0 48
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
*键:42
#键:35
另:MOTO VXXX大屏幕系列的键值:左软 21;右软22;中键20;菜单23
更详细内容请查看MOTOSDK中DOCS目录内的API手册
Part III
通过修改游戏键值,我们知道keyPressed(keyCode)是怎么回事。现在,我们来讲讲按键的另一种方式:getGameAction(keyCode)
同样以简单基础为切入点,这里不会讲太复杂的深入研究。
getGameAction(keyCode)
也就是说,这个值是由KEYCODE所得来的,值列表:
键名 KEYCODE GAMEACTION
导航键上: -1 1
导航键下: -6 6
导航键左: -2 2
导航键右: -5 5
中键: -20 8
数字键1: 49 9
数字键2: 50 1
数字键3: 51 10
数字键4: 52 2
数字键5: 53 8
数字键6: 54 5
数字键7: 55 11
数字键8: 56 6
数字键9: 57 12
由上表可看出,如果一个游戏采用了getGameAction(keyCode)这样的方式,得出的值无论是导航键还是数字键的2、4、6、8,都可以来进行操作,节省了程序员的麻烦及节约了空间。而且getGameAction是标准API,即上表中的值在任何机型上都是相同的,所以也十分方便移植(多用在动作和射击游戏上)。
不过需要值得注意的是,getGameAction对NOKIA的左右软键是有效的(数值暂不明)。但是对于MOTO来说(包括索爱等),getGameAction对左右软键是无效的,具体数值为0。所以如果这个时候仍然修改到左右软键,就可能会出错。另外#*键也都是无效,数字0暂不明。
学会getGameAction,对修改按键来说能够更进一步。getGameAction的值虽然一般不用去修改,但是对阅读代码是有帮助的。而且有的游戏会利用getGameAction来进行判断,这个时候就需要利用到这方面的知识了。

PART IV —— 对话框修正

游戏画面修正教程
由于MOTO C系JAVA游戏那恨死人的116高度(屏幕128*128,但游戏屏幕是128*116),使得移植其他游戏时带来很多的麻烦,尤其是RPG的对白部分。而且由于每个游戏的编制手法都不同,所以没有一个统一的教程办法,这里仅举一例比较实用的对话框修改过程。有兴趣学习的朋友可以举一反三。
第一步其实应该来讲讲API里的drawstring()、substring()等函数,但是作为初级入门,方便大家理解……先跳过。简单的说drawstring是画字符串的一个重要标志,但因为游戏经过混淆,所以并不肯定能在反编译的源代码里能看到。
这里是韦小宝传奇II的画面,可以看到屏幕最下方的一行字被遮去了一半。这是因为原游戏的高度是128所致。


接着我们在h.class里找到一处代码,这是反编译后的:(怎样找到或者说找不找的到完全看经验搜索……)
// 后是注释说明
private void b(Graphics g1)
{
byte byte0 = 4; //定义变量byte0的值为4
byte byte1 = 86; //定义变量byte1的值为86
a.a(g1, 0, byte1, 128, 42); //在 X坐标0、Y坐标byte1 = 86处画一个宽为128,高为42的矩形框
int i1 = 1; //定义变量i1的值为1
int j1 = byte1 - 13 - 2; // 定义变量ji = 86 - 13 - 2 = 71
g1.setColor(0x6b4338); //设置颜色为 6b3338(棕色)
g1.fillRect(i1 + 1, j1 + 1, 58, 15); //用棕色从X坐标i1 = 2,Y坐标 j1 = 71处起填充宽为58,高度15的矩形框
g1.setColor(0); //设置颜色为 黑色
g1.drawRoundRect(i1, j1, 59, 14, 2, 2); //用黑色从X坐标i1 = 2,Y坐标 j1 = 71处起画一个宽为59,高度14的圆角矩形框
g1.setColor(0xffffff); // 设置颜色为全白
g1.drawSubstring("海公公 韦小宝 建宁公主小玄子 皇太后 书生嫖客陈近南 茅十八 小太监 小宫女 温家大哥温家二哥舍妃 冷宫后妃??? 御医 库管大人大内侍卫韦春花 ", a[(r << 1) + 1] * 4, 4, i1 + 3, j1 + 2, 20); //这里的画字符串曝露了这一片代码是写对话的功能,否则真的是很难找到。
h _tmp = this;
g1.setColor(0); //设置颜色为黑色
byte byte2 = a[r << 1];
h = 0;
int k1 = 9;
if(byte2 - k < 9)
k1 = byte2 - k;
h += k1; // 以上几行猜测是处理字符是否超出边界用,恩,说明这个游戏界面还是比较高级的
g1.drawSubstring(c, A, k1, byte0 + 2, byte1 + 10, 20);//画第一行字符:在X坐标byte0 + 2 = 6、Y坐标byte1 + 10 = 86 +10 = 96 处开始画字符串。
int l1 = A + k1;
int i2 = k + k1;
if(byte2 == i2) //判断第一行是否就把字符给显示完了,是的话返回,不是的话继续执行下面代码
return;
k1 = 9; // 以下几行和上面的雷同
if(byte2 - i2 < 9)
k1 = byte2 - i2;
h += k1;
g1.drawSubstring(c, l1, k1, byte0 + 2, byte1 + 10 + 13, 20); //画第二行字符:在X坐标byte0 + 2 = 6、Y坐标byte1 + 10 + 13 = 86 + 10 + 13 = 109 处开始画字符串。
}
OK,分析结束,我们一般修改时要修改对话框,但是如果对话提高高度的话那么人名也就必须相应的提升,对不对?
实际上红色标出的是最关键的2句,然后从中可以得知 byte1 是关键参数,影响了好几处的高度,所以只要把 byte1 = 86 这个值修改掉后就好办了
虽然116和128相差了有12,但是一般修改时减去10就可以了,所以把 byte1 修改为 76 就好了,使用16进制工具打开h.class查找1056(86的16进制值=56),然后修改为104C,保存,OK!拖入压缩包中
修改后的模拟器运行画面:

part V 修复读档功能
有些游戏经常是退出时自动存档,然后在重开游戏时就能够读档继续游戏了。国内以汉风工作室的一些游戏如《英雄时代》《罗马帝国》《大汉王朝》为特征。但是这些游戏在被修改到其他机种上时发现读档存在问题。具体表现为,安装游戏后第一次是能够正常读档,但之后再选“继续游戏”,游戏总是从头开始(等于选择“新游戏”的效果)。无非2种可能:1、读档失败;2、存档失败。
在仔细观察了游戏退出时的速度后,验证存档是正常的(若想进一步证实,可以存档比较前后的RMS文件来定论),那么问题就是出在读档了。
好,我们反编译游戏有关RMS操作的e.class文件,可以看到如下代码:(以《大汉王朝》为例,其他大同小异,代码当然是混淆后的)
switch(i)
{
case 2: // '\002'
_fldtry = null;
_fldvoid._mthif(true);
_fldnull = 22;
break;
case 1: // '\001'
if(_fldnull != 22)
{
_fldtry = null;
if(!a(true))
_fldvoid._mthif(true);
_fldnull = 22;
}
break;
这一处是主菜单的操作结构,case 1 是继续游戏,case 2是新游戏,对比上下代码分析后,得出fldnull这个是当前场景判断,其值为21时意思是当前在标题画面,为22时表示当前在游戏画面。(游戏的主菜单随时可以呼出)
当fldnull为22时,选“继续游戏”就直接break跳出了,让玩家继续当前游戏。而21的话就开始进行初始化的操作,可以看出与“新游戏”的语句几乎相同,但是多了一句判断:if(!a(true))。OK,就是这一处了,当判断if(!a(true))为true时,从头开始游戏,即是执行_fldvoid._mthif(true);故我们将_fldvoid._mthif(true);改为_fldvoid._mthif(false);这样无论是a(true))还是a(false)),都将执行_fldvoid._mthif(false);游戏就不会被从头开始了。
也许读者已经发现,这样的话强行去读档,还没有存档过怎么办?的确是这样,当游戏还没有存档时就万不可按继续游戏了(按下就会出错),而汉风出的游戏一贯都是以继续游戏放在菜单的第一位的,很容易引诱别人第一次游戏时选“继续游戏”。所以,我们可以将字符串的“继续游戏”和“新游戏”对换,再将上方代码中case 1和case 2的指向地址对换,就不会容易出错了。
疑惑:
为什么在S40机型上正确的读档会在MOTO真机上出现读档错误(在MOTO模拟器上没有此错误),还是不能理解,对比《英雄时代》的S40与MOTO C650版本的源代码后也没有得出结论(相关处的源代码一样,也许是我看漏)。故只能在此做这样的修改以使得游戏可以正常读档。
小小PS:汉风出的游戏都很不错哈,个人很喜欢,除了上述的外还有《女娲》《荒岛物语》《郑和下西洋》等。在箱子上看见岩浆的名头就害怕,他们出的小游戏不是一般的垃圾,但是由汉风制作,岩浆代理发行的游戏就都很不错。
VI 单机版修改
将本需联网下载内容的手机游戏改为单机是个节约GPRS流量费以及为部分神州行用户考虑的好方法。目前游戏通过网络下载资源主要是2种:
1、图片资源
主要是一次性的图片资源,下载完毕后就不需要再次下载了
2、场景文件
类似仙剑这种游戏进行到一定的时候通过下载场景文件来将游戏内容灌输入程序中。
无论哪种,所用的无非都是HTTPCONNECTION的方法,不过在细节上,有很多不同,这里就不多说了。
基本原理:
将需要通过HTTP下载的文件下载后拖入jar文件包内,并且修改其下载路径。
例如我们把原本需要联网下载的img.dat先下载后拖入jar包根目录,然后将其原本的下载路径:http://xx.xxx.xxx.xxx/img.dat更改为 file:///img.dat 就行了。
OK,这是最基本的原理,但不是说每个游戏都是这么简单的。基本上这样做能够成功的游戏很少,《江湖侠情》(下载场景类)这样做就可以成功了。
有的游戏则十分另类,例如《蝴蝶迷案》,他的程序在载入图片时会自动搜索根目录下是否有此文件,如果有则就自动载入,这样的游戏通过上面的办法也可以轻易搞定。
游戏有验证:
大多数游戏还是会在游戏中进行验证,不过关的坚决不会通过。这样做是为了防止程序出错。这个时候我们不得不分析原代码进行进一步修改。以《古玩收藏家2》为例:
//这一段是图片下载的路径,我们可以用IE敲入以下2个地址直接下载到图片资源。程序判定在下载成功时ch=1,地址错误则ch=2,内存空间不够则ch=3
if(ch == 0)
try
{
_mthif("http://www.ptwchina.com/guwan2/nokia40/10.png";
_mthif("http://www.ptwchina.com/guwan2/nokia40/15.png";
ch = 1;
}
catch(IOException ioexception)
{
ch = 2;
}
catch(RecordStoreException recordstoreexception)
{
ch = 3;
}
break;
//这一段是HTTP下载操作,以上这2段是联网游戏中常见的部分
private void _mthif(String s1)
throws IOException, RecordStoreException
{
HttpConnection httpconnection;
InputStream inputstream;
httpconnection = null;
inputstream = null;
httpconnection = (HttpConnection)Connector.open(s1, 1, true);//连接URL地址s1,方法为GET,true表示下载完成后断开链接)
httpconnection.setRequestMethod("GET";
if(httpconnection.getResponseCode() != 200)//getResponseCode() 表示返回结果,200表示正常。这里如果不是200(非正常)则抛出异常
throw new IOException();
使用基本的修改路径的方法,我们发现游戏仍然报告下载失败。于是我们要继续分析代码,看看其对PNG是如何操作的,我们发现以下代码:
av = new Image[i1];
try
{
for(j1 = 0; j1 < i1; j1++)
if(j1 != 10 && j1 != 15 && j1 != 14 && j1 != 13 && j1 != 12 && j1 != 6 && j1 != 7 && j1 != 8 && j1 != 9)
av[j1] = Image.createImage("/" + j1 + ".png";
}
原本联网需要下载的图片是10.png和15.png,在这里,他的含义是只要不是6-15.png的图象文件就可以被创建,虽然还不太明白他为什么要这么做处理,但是我们正好利用一下,于是将10和15这2个数字改掉,改为大于17的就可以了(游戏本身PNG命名为1-17.png)。目的在于让他把10.png和15.png载入并创建。
好了,图片是正常载入了,但是这个异常还是可能被抛出,那么我们就把:
catch(IOException ioexception)
{
ch = 2;
}
这里的ch = 2 改为ch = 1,表示读入正常来骗过程序。
把修改后的class文件替换掉原文件,整个游戏就不需要联网来下载图片了。
联网修改单机还存在诸多难题,尤其对于S40V1来讲容量的限制是最致命的。和修改按键一样,不同的游戏根据其代码有着不同的修改方法,没有一个统一的定论。


手机游戏修改VII 软键修改之没有-6?
改按键原为修改之起源和基础,众所周知NOKIA游戏的左软键是-6,右软键是-7。于是反编译CLASS后进行搜索就是必要的过程了。但是有时偏偏搜遍了所有的CLASS也搜不到-6,这个时候怎么办呢?
其实根据游戏的不同,不一定都会在CLASS反编译后包含着-6。这里以FIFA2006 S40V2版举例。
这个游戏的键位处理是在e.class中,反编译后搜索,没有-6。我们找到keyPressed处:
public void keyPressed(int i1)
{
if(i1 != 49 && i1 != 51 && i1 != 55 && i1 != 57 && i1 != 35 && i1 != 42 || j == 5 || j == 9)
w = Z[i1 & 0xff] & 0xff;
}
恩,如果你看的懂这里的代码那么下面就不用说了。但也许你看不太懂这里的代码,这也没有关系,看也知道Z[]这个变量数组很有关系,从头再搜索“Z[”,找到:
Z[50] = 4;
Z[56] = 8;
Z[52] = 1;
Z[54] = 2;
Z[53] = 16;
Z[35] = 16;
Z[42] = 32;
Z[49] = 5;
Z[51] = 6;
Z[55] = 9;
Z[57] = 10;
Z[253] = 1;
Z[252] = 2;
Z[255] = 4;
Z[254] = 8;
Z[251] = 16;
Z[250] = 64;
Z[249] = 32;
OK,这下就一眼即明了
Z[253] = 1;//-3
Z[252] = 2;//-4
Z[255] = 4;//-1
Z[254] = 8;//-2
Z[251] = 16;//-5
Z[250] = 64;//-6
Z[249] = 32;//-7
用16进制软件打开e.class,搜索1100FA,OK~成功~接着就不必说了吧
这里仅举一例,大家可以举一反三,掌握思路后问题就迎刃而解了。

手机游戏修改VIII 软键修改之16进制码修改
有时候,光修改数字是不够我们修改的,本文所讲的是修改按键时将变量修改为数字的操作。是对用16进制软件操作class修改的进一步提升。
这次拿来开刀的游戏是Revival,我们这里拿的是NOKIA 6230(S40V2)版本来进行修改。OK,先找到keyPressed(),在d.class中,搜索-6,很明显找到:
static int cG = -6;
static int bZ = -7;
于是我们把这两个改为:
static int cG = -21;
static int bZ = -22;
拖回JAR包中一看,主菜单部分是正常了,游戏中还是不对,说明其他部分还有-6?于是我们找,找遍了也没找到合适的-6,回过头再来看这个d.class,找到键值定义处:
public int _mthdo(int i)
{
if(i == cr)
i = cG;
else
if(i == cc)
i = bZ;
if(i == cG || i == bZ)
return i;
int j = 0;
byte byte0 = 0;
try
{
j = getGameAction(i);
}
catch(Exception exception) { }
if(i == 42)
byte0 = 0;
else
if(i == 35)
byte0 = 1;
else
if(i == 48)
byte0 = 11;
else
if(i == 49)
byte0 = 6;
else
if(i == 50 || j == 1)
byte0 = 2;
else
if(i == 51)
byte0 = 7;
else
if(i == 52 || j == 2)
byte0 = 4;
else
if(i == 53 || j == 8)
byte0 = 10;
else
if(i == 54 || j == 5)
byte0 = 5;
else
if(i == 55)
byte0 = 8;
else
if(i == 56 || j == 6)
byte0 = 3;
else
if(i == 57)
byte0 = 9;
return byte0;
}
数字键盘部分就忽略不计了,我们主要结合着看以下部分:
static int cG = -21;
static int bZ = -22;
//...............
if(i == cr)
i = cG;
else
if(i == cc)
i = bZ;
if(i == cG || i == bZ)
return i;
可以看到,这里是处理软键的部分,当按键值为cr时,返回我们所定义的左软键值cG;当按键值为cc时,返回我们所定义的左软键值bZ。cr和cc推算为-6和-7(可以通过模拟器测试来验证这一推算正确)。那么cr和cc的值在哪里呢?我们在c.class中找到
datainputstream = new DataInputStream(d.cE.getClass().getResourceAsStream("/dat/lng"));//读取文件lng,实际上是语言包
_fldelse = datainputstream.readUTF();
c = (byte)_fldelse.indexOf(37);
short word0 = datainputstream.readShort();
short word1 = 1;
do
{
if(word1 > 31)
{
byte abyte0[] = new byte[word0];
datainputstream.readFully(abyte0, 0, word0);
if(word1 >= 303)
{
String s = a(abyte0);
try
{
int l = Integer.parseInt(s);
switch(word1)
{
case 303:
d.cg = l == 1;
break;
case 304:
d.cG = l;
break;
case 305:
d.bZ = l;
break;
case 306:
d.cr = l;//赋值给cr
break;
case 307:
d.cc = l;//赋值给cc
//省略...................
以上一大堆代码,只要看注释部分就可以了。由此得知他是将值藏在了lng中,但是我们打开lng,其中的内容经过了处理,无法找到-6和-7。这条路走不通了,我们回过头看d.class,还是这部分:
if(i == cr)
i = cG;
else
if(i == cc)
i = bZ;
if(i == cG || i == bZ)
return i;
将cr和cc的值代入后应该是:
if(i == -6)
i = cG;//等于:i = -21
else
if(i == -7)
i = bZ;//等于:i= -22
if(i == cG || i == bZ)
return i;
按照我们的修改思路,应该是改为:
if(i == -21)
i = cG;//等于:i = -21
else
if(i == -22)
i = bZ;//等于:i= -22
if(i == cG || i == bZ)
return i;
这样的情况应该就能保证游戏运行。OK,那么我们就来尝试一下,用16进制工具打开d.class
找到if(i == cr)的16进制码:1BB20097A0
B2009C意思是cr
A0意思是 ==
那么我们把B2009C给替换,如果有一定修改基础,那么-21的16进制码是熟悉了,是10EB,少一位,怎么办?没关系,我们增加一位:11FFEB,OK,这样就可以了。保存后反编译打开一看,成功!if(i == cr)处成功变成了if(i == -21)
光看反编译是不行的,拖入JAR包中实地测试,哈哈,左软键正确咯~
右软键也如法炮制,有兴趣的朋友可以试下。


手机游戏修改 第9话: 赛车游戏高度修改
这是很早修改着的一个游戏,修改后一直没拿出来。名字是法拉利经理人(Ferrari Manager)。一款集赛车和模拟经营要素的游戏。原版是S40的128*128,我计划改为MOTO C650的128*116。经过简单的处理后,游戏是可以运行了,但是高度的差距使得赛车在C650上无法显示出来,这个郁闷。好,那么就来修这个高度。
思路:drawImage(赛车图片,x横坐标,y纵坐标,anchor);
代码里肯定有这么一句来画赛车的,我们要做的就是改这个Y纵坐标!
我们先解开资源文件,找到赛车的图片playercar.png,然后反编译class,在e.class中找到:
a = Image.createImage("/playercar.png");
那么接着就是找drawImage(a,.....不出我们所料,找到这么一段:
public void c(Graphics g1)
{
int i1 = a.getHeight(); //图片高度
int j1 = a.getWidth() / 5; //图片宽度除以5(因为这张图包含了5个小图)
int k1 = (128 - j1) / 2; //128-图片宽度除以2,取得赛车中心点的位置
int l1 = 128 - (7 * i1) / 10 - b;
byte byte0;
if(H[0] < -450)
byte0 = 0;
else
if(H[0] < -150)
byte0 = 1;
else
if(H[0] < 150)
byte0 = 2;
else
if(H[0] < 450)
byte0 = 3;
else
byte0 = 4;
m(g1);
g1.clipRect(k1, l1, j1, i1);//以上几句是决定切割出赛车需要的的不同状态图象
g1.drawImage(a, k1 - j1 * byte0, l1, 20);//画赛车位置,可以看出l1是关键
a(g1, k1 + j1 / 2, 128, (j1 * (2 - byte0)) / 6);
}
OK,既然l1是关键,那么上面这句int l1 = 128 - (7 * i1) / 10 - b;就很好理解了,把这里的128改为116。然后将修改后的class拖入jar包中,OK!原本本压在屏幕下方边界之外的赛车显示出来了!
好,这篇就讲到这里,虽然赛车是显示出来了,但是事关游戏中的碰撞检测,还需要进一步修改。
===============================
1.机型:三菱M350/M750
键 键值 对应16进制
左右软键 无定义 -
OK键 -6 FA
上键 -1 FF
下键 -2 FE
左键 -3 FD
右键 -4 FC
拨号 -5 FB
2.机型:NEC N108
键 键值 对应16进制
左右软键 无定义 -
OK键 -5 FB
上键 -1 FF
下键 -2 FE
左键 -3 FD
右键 -4 FC
拨号 -10 F6
3.机型:moto v220/c650/c381/E398
键 键值 对应16进制
左软键 -21 EB
右软键 -22 EA
中键 -20 EC
上键 -1
下键 -6
左键 -2
右键 -5
拨号 -10
数字0~9键:48~57
0 48 0000 0030
1 49
2 50
3 51
4 52 0000 0034
5 53
6 54 0000 0036
7 55 0000 0037
8 56
9 57 0000 0039
*键:42
#键:35
另:MOTO VXXX大屏幕系列的键值:左软 21;右软22;中键20;菜单23
更详细内容请查看MOTOSDK中DOCS目录内的API手册
4. 机型:飞利浦568
左软键 -202
右软键 -203
OK -5
方向键上 -1
向下 -2
向左 -3
向右 -4
拨号键 -200
5.机型:三星X108/X608
键 键值 对应16进制
拨号键:-5 FB
C键:-8 F8
左右软键 无定义
上键 -1 FF
下键 -2 FE
左键 -3 FD
右键 -4 FC
中键: -5 FB

数字0~9键:48~57
*键:42
#键:35
NOKIA手机的键值除了左右软键分别为 -6 和 -7 外和这一样。
另:三星部分手机的左右软键是有键值的分别为 -6 和 -7。

6.Alcatel OT557/556 /MOTO V600i
键 键值 对应16进制
左软键 -21 EB
左软键 -22 EA
OK键 -20 EC
上键 -1 FF
下键 -6 FA
左键 -2 FE
右键 -5 FB
7.多普达MIDP2.0模拟器
键 键值 对应16进制
左软键 无
左软键 -无
OK键 -5
上键 -1
下键 -2
左键 -3
右键 -4
8.索爱系列(K300、K500、K700、W800等)
键 键值 对应16进制
左软键 -6 FA
右软键 -7 F9
中键 -5 FB
上键 -1 FF
下键 -2 FE
左键 -3 FD
右键 -4 FC
拨号 无 --
C键 -8 F8
回退键 -11 F5
ok确定键:-5
 1:49
 2:50
 ............ 
9:57 
0:48
 *:42
 #:35,
c键值为-8
9.MOTO V303:
键 键值 对应16进制
左软键 21
左软键 22
OK键 20
上键 1
下键 6
左键 2
右键 5
数字 2(上) 50
数字 8(下) 56
数字 4 (左) 52
数字 6(右) 54
数字 5(OK) 53
10.SHARP902 ,键值等同MOTO C650
索爱系列(K300、K500、K700、W800等)
键 键值 对应16进制
左软键 -6 FA
右软键 -7 F9
中键 -5 FB
上键 -1 FF
下键 -2 FE
左键 -3 FD
右键 -4 FC
拨号 无 --
C键 -8 F8
回退键 -11 F5
11.松下VS3
键 键值 对应16进制
左软键 -21
右软键 -22
中键 -20
上键 -1
下键 -6
左键 -2
右键 -5
拨号 -10
12.波导S689
屏幕大小:128*176(128*144)
键 键值 对应16进制
左软键 -7 F9
右软键 -6 FA
中键 -5 FB
上键 -1 FF
下键 -2 FE
左键 -3 FD
右键 -4 FC
13.东信ES1008触摸屏
上 -1
下 -2
左 -3
右 -4
OK -5
侧翻页键 0
14.moto C975
屏幕大小:176*204
键 键值
左软键 -21
右软键 -22
中键 -20
上键 -1
下键 -6
左键 -2
右键 -5
拨号 -10
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
0 48
* 42
# 35
15.波导M19
左软键-7 右软键-6
1 49 2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
* 42
0 48
# 35
OK -5
上 -1
下 -2
左 -3
右 -4
16.华为u636
键 键值
左软键 -6
右软键 -7
中键 -5
上键 -1
下键 -2
左键 -3
右键 -4
拨号 -10
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
0 48
* 42
# 35
clear -8
17.MOTO MPX220系列(智能机)
键值:
上:-1
下:-2
左:-3
右:-4
中键:-5
左软:-7
右软:-8
拨号键:-9
返回键:-6
数字键盘:有,键值略
结论:基本可以使用SE K700系列的游戏

19.西门子c65(X65系列)
m65,(c65,cx65,c75)
屏幕大小:128*128
s65
屏幕大小:132*176
键 键值 对应16进制
左键: -1
右键: -4
中键: -26 E6
菜单键: --
拨号键: -11
挂机键: -12
左方: -61 C2
右方: -62 C3
上方: -59 C5
下方: -60 C4
0到9数字键 48--57
*键 42
#键 35


20.nokia S40
键 键值 对应16进制
左键: -6
右键: -7
中键: -5
菜单键:--
拨号键:-10
挂机键:-11
左方: -3
右方: -4
上方: -1
下方: -2
21.飞利浦 9@9e
左软键 105
右软键 106
中键 -5
上键 -1
下键 -2
左键 -3
右键 -4
拨号 -10
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
0 48
* 42
# 35
22.明基S700
左右软键 无定义
ok-20
上-1
下-1
左-2
右-5
*42
0 48
#35

23.机型:moto E1070
键 键值
左软键 -21
右软键 -22
中键 -20
上键 -1
下键 -6
左键 -2
右键 -5
拨号 -10

24.moto V3i
左软键 -21
中软键 -23
右软键 -22
中键 -20
上键 -1
下键 -6
左键 -2
右键 -5
拨号 -10
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
0 48
* 42
# 35
上网键 -104
短信键 -105
25.E1键盘键值:
拨号键:-10
按摇杆:-20
摇杆上:-1
摇杆下:-6
摇杆左:-2
摇杆右:-5
左软键:-21
菜单键:-23
右软键:-22
数字键1:49 数字键2:50 数字键3:51
数字键4:52 数字键5:53 数字键6:54
数字键7:55 数字键8:56 数字键9:57
* 号 键:42 数字键0:48 # 号 键:35
音量+:-100 音量—:-101 语音拨号键:-103
26.MOTO A768
左侧上:-1
左侧下:-2
中上:-3
中下:-4
右侧:-5
A768是大屏机 240X320

27.MOTO L6
屏幕大小:128*160
键值同C
28.MOTO L7
屏幕大小:176*220
键值同C
29.MOTO E1000/E1060/E1070/E1120
屏幕大小:240*320
键值同C

30.MOTO A668手机
左软键=21
右软键=22
左=17
右=18
上=15
下=16
中间=24
数字键可以用

31.夏新A675
键 键值
左软键   -6
右软键 -7
OK键 -5
上键 -1
下键 -2
左键 -3
右键 -4 FC

32.机型:飞利浦859
左软键 -202
右软键 -203
OK -5
方向键上 -1
向下 -2
向左 -3
向右 -4
拨号键 -20
==========================================

最近一期的箱子破解游戏似乎OS7以上的机型都不能安装,都会有授权失败的字样,最早我安装很多JAVA游戏的时候也有这种情况,开始我上网查了,好象没有专门介绍这方面的东西,后来自己找到了解决的办法,这里和大家分享下:
1.授权失败的解决办法:
通常授权失败是由于游戏文件是破解版的缘故,这里简单的说一下梦网游戏破解的简单道理和方法:每月的1号,11号,21号都是移动百宝箱更新新游戏的时候,“厚道”的移动会在推出新游戏的时候推出一次性试玩的游戏版本(S40,S60V1,SE,MOTO都有,但是惟独S60V2也就是7610的箱子没有)试玩的原理很简单,就是在原版游戏的基础上处理了下,自动生成几个class,通过生成存档来判断是否运行过一次,下下来的JAR文件会有一个com文件夹在里面,里面有fourthpass和sincetimes两个文件夹,破解的原理就是将里面处理RMS的代码进行修改,使得程序得以正常运行。一般说来,如果是直接每个游戏每次修改,理论是不会出现授权失败的问题,但是如果破解者为了省事,将一个修改好的文件直接替换,可能就会出现授权失败的问题。解决的办法其实很简单:
将下下来的JAR文件里面的COM文件夹删除,然后传到手机上,这样就不会存在安装失败的问题了,但是安装完后游戏不能运行了,再将没有删除COM文件夹的JAR文件传到手机上,用SELEQ复制到游戏安装目录下(SYSTEM/MIDLET/下,看你安装文件的名字就可以判断,不是在SYSTEM/APP下,那个只是安装产生的注册文件),覆盖原来安装的游戏,就可以正常运行了,原理和安装SIS原版游戏,然后用破解文件替换APP文件的原来是一样的不过操作相对麻烦点了。
2.文件无效的解决办法:
产生该情况的原因一般是因为JAR文件中的MF信息遭到了修改造成的,解决办法很简单,如果能找到原版的游戏,将里面的MF信息修改回来就可以了。用WINRAR打开JAR文件,里面有一个META-INF文件夹,里面的MANIFEST.MF文件就是信息了,用记事本打开,然后修改,重新保存,记住一定要用另存为,编码选择UTF-8格式。最保险的方法是你安装了WTK,新建一个工程,主MIDLET和游戏的MIDLET名字一样,把SETTING里面的信息写成游戏需要的信息,比如ICON,作者,版本什么的,这样就会在WTK的工程APP/工程文件/bin文件夹里自动生成一个MANIFEST.MF文件,使用这个文件替换原来的文件就可以解决文件无效的问题。
3.版本无效
一般是由于CLCD的版本造成的问题,同样是修改MANIFEST.MF文件,把MicroEdition-Configuration: 这一项修改,比如QD,6600都是MicroEdition-Configuration: CLDC-1.0,如果是MicroEdition-Configuration: CLDC-1.1就直接改成MicroEdition-Configuration: CLDC-1.0,但是这种方法只能解决安装的问题,不一定就能够正确运行,只有少数游戏虽然写的是1.1,但是实际上还是1.0的游戏可以,同样,QD也可以通过修改MIDP的版本来解决安装的问题,至于能不能运行就看游戏本身和RP了

附上一些整理的其他资料:
jad文件说明及解析:
其实JAD生成的信息都是游戏包内META-INF目录下MANIFEST.MF文件的信息。我们可以通过使用JAD生成器来生成。但是生成器生成的JAD文件未必正确,而且对中文支持力度不够,所以我们需要自己来修改。

打开JAD(使用记事本就可以):

Manifest-Version: 1.0
这个是META-INF的版本信息,必须有,而且推荐放在最前。

Created-By: 1.4.2-b28 (Sun Microsystems Inc.)
游戏打包的创建信息,无所谓,一般也无关紧要

MIDlet-Name: Adventure Island
游戏名称,想改中文名就是改这个拉~

MIDlet-1: Adventure Island, /i.png, Main
游戏信息,分别是:游戏名称,LOGO地址,主程序文件
注意这里的名称必须与上面的MIDlet-Name保持一致

MIDlet-Icon: /i.png
LOGO地址,必须与MIDlet-1内的保持一致

MIDlet-Version: 1.1.0
必选项,不可缺少

MIDlet-Vendor: Living Mobile GmbH
游戏开发者,随便填什么都可以

MIDlet-Data-Size: 1000
这也是个可选项,表示运行游戏必要的额外空间,以字节计算。如果空间不足安装时则会提示无效文件。

Media-Price: 免费
这个是软件价格,随便你填拉

MIDlet-Description: 冒险岛是一款FC移植游戏
这个是说明文字,也是可以随便改写,都无所谓的

MicroEdition-Profile: MIDP-1.0
MIDP标准,这个小召提过很多次了,MOTO手机都是MIDP2.0的,当然有时候分明2.0的游戏也会被标为1.0,这里MOTO就没有问题拉。这个是必选项。

MicroEdition-Configuration: CLDC-1.0
CLDC标准,MOTO C系列是1.0的,注意索爱一些游戏是CLDC-1.1的,这时就不能用了,会显示无效文件。

MIDlet-Jar-Size: 95052
JAR文件大小,使用JAD文件来链接安装游戏时这个参数必须正确,否则会显示无效文件。模拟器运行时可忽略。

MIDlet-Jar-URL: mxd.jar
JAR文件地址,前面没有路径就是同一目录咯~不能有错。以上这2项最好放在JAD文件的最后~

一般游戏不能玩,解决方式:
1、乱码
解压JAR包,查看其中META-INF目录下的MANIFEST.MF文件里面是否有乱码(用记事本就可以打开),如果有,则将其逐一修改为非乱码。产生乱码的地方主要是中文的游戏名、介绍开发商和游戏价格。就是以下4行:

游戏名:(红色标记的就是游戏名,改为自己想要的名字吧,注意2处保持一致)
MIDlet-Name: Adventure Island
MIDlet-1: Adventure Island, /i.png, Main

开发者:
MIDlet-Vendor: Living Mobile GmbH

游戏介绍:
MIDlet-Description: 冒险岛是一款FC移植游戏

游戏价格:
Media-Price: 免费

OK,把这上面4处的乱码全部修正就可以了!随便填什么都没有关系的!(注意标点符号用英文半角,每行的冒号和后面的文字之间有英文空格)然后另存为同名文件,选择UTF-8格式,再拖入JAR包替换原文件就可以了,重生JAD试试。

2、JAD格式有错误
JAD格式有错有2个可能,一个是JAD生成器不规范(例如生成的不是UTF-8格式的JAD文件),第二个还是MANIFEST.MF文件本身有错(箱子游戏可真麻烦呀)

JAD明显的错误包括,字符显示不完善,一串字符明显还有下文,他突然间就断掉了。例如:
MIDlet-Description: 冒险岛是一款FC移植游戏,适用于MOTO C65 (应该是C650吧??)

MIDlet-1: Adventure Island, /i.png, Ma (Main的“in”上哪去啦??)

这个明显就是出问题。

这个时候还是手工来修 MANIFEST.MF了,方法同上

3、JAD生成器无效
还有这种事?的确有,JAD生成器的程序其实笨笨的,这个时候你去查看一下META-INF这个目录名是否皆为大写,有时候变成了Meta-inf,这个时候JAD生成器就不认了。

4、文件路径和容量一定要正确
这个不用多说了,不过从WAP上下载下来的游戏JAD路径多数不正确,重新生成一下

5、CLDC不能超出标准
MicroEdition-Configuration: CLDC-1.0
1.0是符合标准的,1.1就超出了C650的标准

6、内存不够
MIDlet-Data-Size: 1000 这个表示了至少保留1K的剩余空间,如果这个数字显示为1000000,则表示至少保留1M的剩余空间,这个时候如果剩余空间不足就会“无效文件”,把这行去掉就可以了

7、缺少必要项目
以下项目是JAD内必须具备的,其他的都是可选项,去掉也没关系。但是必选项内如果少了一项可就装不了了
Manifest-Version: 1.0
MIDlet-Name:
MIDlet-1:
MIDlet-Version:
MIDlet-Vendor:
MicroEdition-Profile:
MicroEdition-Configuration:
MIDlet-Jar-Size:
MIDlet-Jar-URL:

8、JAD和MANIFEST.MF文件内容不同
这个就是提醒我们修改了MANIFEST.MF后一定要重生JAD



=================
所需软件:
HexWorkS 这个很难找了,推荐使用ultraedit32 很好下载,由于容量有点大,不提供下载
小颖Java源代码反编译专家
112993
javamagic 手机Java游戏某些兼容性问题而设计的软件
112994
javafull 手机游戏全屏修改
112995

手机顽童 手机模拟器,论坛里应该有



guest
2007-11-8 12:09:35 发表 编辑

据说 getGameAction() 的返回值不一定有效,比如对 "清除键" 的取值就是 0 .好象说返回 0 就是没取到正确的值.
guest
2007-11-13 13:42:55 发表 编辑

虚拟机上老是报内存不足,真机上也一样. 据说是因为创建了太多类引起的 System.gc(); 和置对象为 null 会有点效果.

总数:4 页次:1/1 首页 尾页  
总数:4 页次:1/1 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1