站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题手机游戏修改(4)按键的修改实践[转贴]

手机游戏修改(4)按键的修改实践[转贴]

摘要: 手机游戏修改(4)按键的修改实践[转贴]
手机游戏修改(4)按键的修改实践


如果你能够将上面三篇的“废话”看遍,还能继续看这一篇,那么恭喜你,现在我们真的要开始实践了。

我们已经解压好一个JAR文件。

第一步,我们打开UltraEdit,选择“搜索-在文件中查找”功能,然后在查找框内输入“keypress”,选择文件为*.class(表示搜索所有的class 文件),路径设为刚才解压的文件夹路径。我们可以这样做的原因是,在.class 文件(学名叫做字节码文件,bytecode)中,仍然保留着源代码中所出现的函数名,而Keypressed为处理按键的一个命令。

比如我们搜索到在e.class 中出现了keypress。接下来,我们就用小颖或DJ打开e.class文件,这时候,我们就得到了源代码。我们在源代码中再次查找keypress,我们会找到keypressed函数。比如我们得到了如下的代码:

public void keyPressed(int i)
{
if(f == 2)
if(i == -6)
{
if(a == 0)
g.k();
else
if(a == 1)
g.i();
else
if(a == 2)
g.a(0);
else
if(a == 3)
g.d();
else
if(a == 4)
g.j();
else
if(a == 5)
g.g();
} else
if(i == -7)
g.b();
}
这段代码实际上很简单,学过一点编程知识的人,都应该能看明白。我们看红颜色的两句,i代表的就是keycode(从keypressed 函数的参数可以看出来),那么if(i==-6)的意思就是:如果按下一个键,而这个键的键值是-6的话,就执行后面的语句。我们这个游戏是诺基亚S60的游戏,我们前面讲过-6是诺机左键的键值,那么这句话的意思就是说:如果按下了左键,就执行什么什么命令的意思。下面一句if(i==-7)就是:如果按下了右键,就执行相应命令的意思。看来这里的这段代码,是处理左右键操作的。

接下来,我们用IDA打开e.class文件。我们首先在Functions窗口中找到keypressed函数,我们发现只有一个keypressed函数,证明就是我们要找的函数。我们双击keypressed函数,IDA自动切换到IDA VIEW窗口,这时候我们看到很长很长的一段汇编指令。

; Segment type: Pure code
.method public keyPressed(I)V
.limit stack 2
.limit locals 2
aload_0 ; var003_0
getfield f I
iconst_2
if_icmpne met003_135
iload_1 ; var003_1
bipush -6
if_icmpne met003_122
aload_0 ; var003_0
getfield a I
ifne met003_31
aload_0 ; var003_0
getfield g LGameMIDlet;
invokevirtual GameMIDlet.k()V
goto met003_135
……

met003_122: ; CODE XREF: keyPressed+11j
iload_1 ; var003_1
bipush -7
if_icmpne met003_135
aload_0 ; var003_0
getfield g LGameMIDlet;
invokevirtual GameMIDlet.b()V
这里,我们省去了中间的部分代码。我们注意到红色的bipush -6和bipush -7,因为源代码是一段很短的代码,中间只有一个-6和-7,那么这里我们就敢断定这个bipush -6就是对应着源代码里面的if (i==-6)的那个-6。-7也一样。

我们选中-6,切换到HEX VIEW-A窗口,我们看到10 FA已经被反色显示了。证明,这个10 FA对应着bipush -6这条指令,我们记下10 FA并记下前后的数值。

接着,用UltraEdit打开e.class文件,查找10 FA,并与IDA HEX VIEW窗口中的代码对比,确定10 FA的位置,然后将10 FA修改为10 EB(这个是摩托手机的左键值,EB对应着-21,如果你不确定某个键值对应的十六进制值,你可以在WINDOWS自带的计算器里转换一下。)

同样,我们将-7对应着的F9修改成EA。然后保存文件就可以了。

接下来,我们要看一下,我们是否修改成功了,用小颖或DJ打开修改后的e.class 文件,我们再次查找到keypressed函数,我们发现里面已经变成了if(i==-21)和if (i==-22)了。这证明我们修改成功了。

接下来,就是将修改后的文件,拖入JAR压缩包里替换掉原来的文件就是了。然后再说模拟器试运行一下,看左右软键是否已经好使了。一般情况下,是没有问题的。



↑返回目录
前一篇: 手机游戏修改(5)Switch之tableswitch[转贴]
后一篇: 手机游戏修改(3)按键修改的基础知识[转贴]