如何获取 JFrame / JPanel 之外的 Canvas 上的点的位置?

How to get the location of a point on a Canvas outside of the JFrame / JPanel?

我正在尝试在我的游戏中添加鼠标外观功能,玩家可以点击 space,然后角色会转到 space。

我有一个 MouseListener,它为我提供与 JFrame 坐标相关的鼠标 X 和 Y。

这不起作用,因为当玩家在世界中移动时,玩家的 X 和 Y 与屏幕上的 X 和 Y 不同。

如何获取与鼠标在 JFrame 上的 X 和 Y 相关的 Canvas 上所绘制内容的 X 和 Y?

如果您在世界中有一个 (x,y) 位置和框架的另一个 (x,y) 坐标,只需检查您当前的相机在世界中的观看位置并抵消差异。

让蓝框成为你的世界边界,黑框成为你的框架屏幕。现在在位置 x 有一个游戏单元。

在框架中,根据框架的坐标将是(x: 200, y: 300)

如果您想获取世界位置,只需添加您的相机在世界中的当前位置即可,即:(200 + 1000, 300 + 1100)

因此您的游戏角色的世界位置将在 (x: 1200, y: 1400)

要得到相反的结果,只需反转过程即可。

How can I get the X and Y of what is drawn on the Canvas related to the X and Y of where the mouse is on the JFrame?

您需要将点转换为相对于另一个组件。

查看 SwingUtilities class。您可以使用 convertPoint(...) 方法将点转换为相对于您希望的任何组件。

另外,不要使用 Canvas class。这是与 AWT 一起使用的。使用 Swing 时,您应该使用 JPanel 进行自定义绘画。