BetterGI脚本开发中实现鼠标滚轮操作的技术方案
背景与问题分析
在BetterGI项目(一个原神游戏辅助工具)的脚本开发过程中,开发者发现无法通过JavaScript脚本直接模拟鼠标滚轮操作。这限制了脚本功能的实现,特别是在需要滚动界面或选择特定选项的场景下。
核心问题在于BetterGI的C#后端代码中,GlobalMethod类没有将IMouseSimulator接口的VerticalScroll和HorizontalScroll方法暴露给JavaScript环境。这使得脚本开发者无法直接调用这些鼠标滚轮相关的方法。
典型应用场景
-
对话选项选择:当角色站在NPC(如蒂玛乌斯)或交互对象(如合成台)前时,游戏通常显示多个可交互选项。正常情况下需要通过鼠标或ALT键呼出鼠标来选择,但脚本无法直接模拟这一过程。
-
物品拾取筛选:在大量掉落物中,玩家可能只想拾取特定名称的物品,而直接按F键会拾取所有物品。
-
界面滚动:许多游戏界面需要滚动操作,如任务列表、背包物品列表等,缺乏滚轮支持使得脚本难以操作这些界面。
临时解决方案
虽然无法直接调用滚轮方法,但可以通过BetterGI提供的键鼠脚本功能间接实现滚轮效果:
向下滚动实现
await keyMouseScript.run(`{
"macroEvents": [
{"type":6,"mouseX":0,"mouseY":-120,"time":0}
],
"info":{
"name":"",
"description":"",
"x":0,
"y":0,
"width":1920,
"height":1080,
"recordDpi":1.25
}
}`);
向上滚动实现
await keyMouseScript.run(`{
"macroEvents": [
{"type":6,"mouseX":0,"mouseY":120,"time":0}
],
"info":{
"name":"",
"description":"",
"x":0,
"y":0,
"width":1920,
"height":1080,
"recordDpi":1.25
}
}`);
性能优化建议
当需要连续多次滚动时,建议采用以下优化方案:
-
批量添加滚动事件:在macroEvents数组中添加多个滚动事件对象,而不是多次调用脚本。
-
避免循环调用:尽量减少在循环中调用键鼠脚本的次数,以降低性能开销。
-
合理设置时间间隔:在连续滚动事件之间设置适当的时间间隔(time字段),模拟更自然的用户操作。
未来改进方向
从技术架构角度看,最理想的解决方案是在BetterGI的后端代码中将IMouseSimulator的完整功能暴露给JavaScript环境。具体可考虑:
-
在GlobalMethod类中添加VerticalScroll和HorizontalScroll方法的封装。
-
提供更简洁的JavaScript API,如mouse.scroll(delta)这样的调用方式。
-
考虑添加对滚轮速度、持续时间的参数控制,提供更灵活的滚动操作。
总结
虽然当前BetterGI的脚本环境缺少直接的鼠标滚轮API,但通过键鼠脚本功能仍可实现滚动效果。开发者可以根据具体需求选择适当的实现方式,同时期待未来版本能提供更完善的鼠标操作API,进一步简化脚本开发流程。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考