exagear部分游戏中鼠标光标只显示一个小“×”图标的解决办法
前言
部分游戏在进入游戏后光标无法显示,会退化成一个叉叉,非常难以辨认。感谢常心大佬的帮助,得知该设置在dex中,当无法获取鼠标图标时,就渲染一个10乘10像素的位图(叉)。因此修改这个位图为可辨认的鼠标图片就行了。测试了一下三国志11和红警3是可以的。
*经老虎山大佬告知,无法解决叉叉与真光标同时存在且偏移的情况(用辐射2测试了一下,这种情况的解决办法:保证游戏窗口占满画面,改环境设置的分辨率为游戏全屏时的分辨率;或者操作模式换成辐射的,通过右上的同步按钮对齐光标。)
修改前:
修改后:
演示视频:
将此功能添加到任意apk
如果你掌握apk的基础修改知识,可以通过本小节的教程将此功能添加到你自己的apk中。如果你是小白,那么应该去找已经修改好的apk直接使用。
用MT管理器编辑dex,进入com.eltechs.axs.widgets.viewOfXServer包名下的AXSRendererGL类,替换整个createXCursorBitmap函数为以下内容。
点击展开代码
.method private createXCursorBitmap()Landroid/graphics/Bitmap; .registers 8 .prologue const/4 v6, -0x1 const/16 v5, 0xa .line 14 :try_start_3 invoke-static {}, Lcom/eltechs/axs/Globals;->getAppContext()Landroid/content/Context; move-result-object v3 invoke-virtual {v3}, Landroid/content/Context;->getResources()Landroid/content/res/Resources; move-result-object v3 invoke-virtual {v3}, Landroid/content/res/Resources;->getAssets()Landroid/content/res/AssetManager; move-result-object v3 const-string v4, "mouse.png" invoke-virtual {v3, v4}, Landroid/content/res/AssetManager;->open(Ljava/lang/String;)Ljava/io/InputStream; move-result-object v3 invoke-static {v3}, Landroid/graphics/BitmapFactory;->decodeStream(Ljava/io/InputStream;)Landroid/graphics/Bitmap; :try_end_18 .catch Ljava/io/IOException; {:try_start_3 .. :try_end_18} :catch_1a move-result-object v0 .line 24 :cond_19 return-object v0 .line 15 :catch_1a move-exception v1 .line 16 .local v1, "e":Ljava/io/IOException; const-string v3, "TAG" const-string v4, "createXCursorBitmap: \u627e\u4e0d\u5230\u9f20\u6807\u56fe\u7247\uff0c\u8fd8\u662f\u7528\u00d7" invoke-static {v3, v4}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I .line 17 invoke-virtual {v1}, Ljava/io/IOException;->printStackTrace()V .line 19 sget-object v3, Landroid/graphics/Bitmap$Config;->ARGB_8888:Landroid/graphics/Bitmap$Config; invoke-static {v5, v5, v3}, Landroid/graphics/Bitmap;->createBitmap(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap; move-result-object v0 .line 20 .local v0, "createBitmap":Landroid/graphics/Bitmap; const/4 v2, 0x0 .local v2, "i":I :goto_2c if-ge v2, v5, :cond_19 .line 21 invoke-virtual {v0, v2, v2, v6}, Landroid/graphics/Bitmap;->setPixel(III)V .line 22 rsub-int/lit8 v3, v2, 0x9 invoke-virtual {v0, v2, v3, v6}, Landroid/graphics/Bitmap;->setPixel(III)V .line 20 add-int/lit8 v2, v2, 0x1 goto :goto_2c .end method
向apk/assets文件夹中添加一张光标图片,命名为mouse.png。这里提供一张。
编译dex,重装apk。再次启动游戏,自定义光标应该就会显示出来了。
这是一个已经改好的apk ,改自BV1d44y1U7K5,数据包也从这下载
探索过程
这次没什么过程,常心大佬直接告诉我了hhh
在AXSRendererGL类里,成员变量rootCursorBitmap就是那个叉叉的位图,用createXCursorBitmap()初始化。在placeCursor()里,首先尝试获取viewFacade的光标,如果获取不到,就用这个默认的叉叉光标。
直接在初始化函数里尝试从assets下读取mouse.png,读不到就还是新建个叉。读取成位图用BitmapFactory.decodeStream
总结
- 由于不是不显示而是显示的图片质量不高,所以换个对比度高的图片就好了。
这个叉蛮反人类的啊。