当高度影响 X 坐标时,如何重新计算 window 内点的坐标?

How to recalculate coordinates of a point inside a window when the height affects the X coordinate?

我在游戏中有一个点我想点击(x:360,y:101,分辨率为 800x600),改变 window 的宽度不会影响这个点的坐标,但是,改变高度确实如此。高度越大,该点的X坐标越向右偏移。 Y坐标也会改变,但速度较慢,不足以让我错过点击,但帮助计算它也会有所帮助。

代码无关紧要,但在这里

WinGetPos, ,,width,height,A
newX := ???            // Need help here
newY := height * 0.168 // Bad, but works
MouseMove, newX, newY
Click

一些额外的信息,这是游戏流放之路。它可以让你把宽度做成你想要的那么大,这样可以让你看得更远。在保持相同宽度的情况下降低高度也可以让您看得更远,但不会让您将其降低到 600 以下。

Image for reference (800x600)

Image for reference (1437x714)

目标的位置似乎取决于两件事:(1) window 的边框和 (2) 垂直分辨率。如果我们只关注客户区(即 window 不包括其边框和标题栏)并将我们的坐标系原点放在该区域的左上角,即您要在 800x600 分辨率下单击的位置是 (356, 78)。我们可以直接按实际分辨率的高比缩放这个点,最后加上边框和标题栏。因此,最终公式为:

newX = borderLeft + 356 * verticalResolution / 600
newY = borderTop + titleBarHeight + 78 * verticalResolution / 600

有趣的是,您的两个屏幕截图的边框不同。 800x600 的镜头左边框为 4 像素,而另一个镜头的左边框为 1 像素。我假设这是由于屏幕截图造成的,并假设左边框为 4px。顶部边框和标题栏高度始终为 23px。

因此,您有:

newX = 4 + 356 * verticalResolution / 600
newY = 23 + 78 * verticalResolution / 600

它为您提供了 1437x714 屏幕截图中的位置 (428, 116),看起来是正确的,除了左边框导致的 3px 差异。