babalae / better-genshin-impact

📦BetterGI · 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集 - UI Automation Testing Tools For Genshin Impact
https://bgi.huiyadan.com/
GNU General Public License v3.0
5.41k stars 348 forks source link

如何设计一个优雅的坐标系转换类 #1

Closed huiyadanli closed 1 year ago

huiyadanli commented 1 year ago

如何优雅的设计一个(N个)类用于二维坐标(x,y)转换,要求实际使用时候简单、美观且语义化 使用这个类的代码能够直观的看出是从哪个坐标转换到目标坐标。

可能有相对以下内容的坐标值,相邻的offset都是已知且动态的

  1. 桌面
  2. 窗口内
  3. 窗口内的某个区域的相对坐标

最终会有用的转换目标坐标:

  1. 桌面坐标,转换为虚拟桌面坐标0~65535,用于鼠标点击
  2. 窗口内坐标,用于矩形绘图展示

额外: 矩形中心点到矩形左上角点的转换 OpenCv点、矩形类到WPF点、矩形类的转换

用于替换下列代码: https://github.com/babalae/better-genshin-impact/blob/6fd51f163590b6c49b22f1cb6db6fc393b2f5dbd/BetterGenshinImpact/GameTask/AutoSkip/AutoSkipTrigger.cs#L66-L68

huiyadanli commented 1 year ago

定义了一个屏幕区域块的对象 RectArea.cs ,封装了所有和屏幕区域相关的操作(找图、识图、OCR、点击等)

无限向下记录相对坐标。获取桌面坐标时,向上遍历即可。

huiyadanli commented 6 months ago

https://github.com/babalae/better-genshin-impact/tree/feat/resolution/BetterGenshinImpact/GameTask/Model/Area

全新的替代品