pygame- 在 "scrolling" 平面上制作鼠标交互元素

pygame- Making mouse-interactive elements on a "scrolling" surface

好的,我们正在制作的风险风格征服游戏的世界地图是由鼠标交互 "country" 对象矩阵构成的,这些对象包含它们自己的值,例如名称、所有者和单位计数。

现在整个地图的大小都适合游戏画面;我们正在考虑使地图可滚动。我发现的一个可能是我们在它自己的比游戏屏幕大的表面上生成地图,然后将地图表面的一部分 blit 到游戏屏幕的子表面上,让玩家输入偏移正在绘制的地图部分给定的时间。

我知道这种类型的滚动有效 - 这不是这个问题的目的 - 问题是使用这种滚动会阻止我们让玩家使用鼠标与地图上的国家/地区正确互动吗?

我们已经尝试了一种滚动形式,我们只是偏移地图矩阵的索引以那样移动国家的位置,但这给服务器处理攻击命令带来了问题,因为相同的两个国家可能处于不同的坐标不同的球员。我描述的滚动方法将允许地图本身对所有玩家保持静止,但是我们如何确定鼠标相对于世界地图的位置而不是它在游戏屏幕上的位置?

您必须将鼠标在屏幕上的位置转换为世界坐标。当你滚动你的地图时,你会产生一个偏移量,你必须使用它来进行平移。

假设地图没有滚动(地图的 (0, 0) 在屏幕的 (0, 0) 处),并且玩家点击了 (12, 12),你知道她点击了 (12, 12) 的世界。

当此玩家将地图向右滚动(假设 100 像素)时,您将在屏幕的 (-100, 0) 处 blit 地图表面。现在如果玩家点击(12, 12),你可以计算出屏幕的(12, 12)在地图(screenX - scrollX, screenY - scrollY).

上实际上是(112, 12)

因此,如果您想确定玩家点击了哪个国家/地区,请始终使用翻译后的坐标(而不是屏幕坐标),您描述的问题就会消失。