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

时间:2016-03-23 22:33:50

标签: java swing canvas game-development

我正在尝试在我的游戏中添加一个鼠标外观功能,人们可以点击一个空格,然后角色会转到那个空间。

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

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

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

2 个答案:

答案 0 :(得分:3)

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

enter image description here

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

在帧中,根据帧的坐标为(x: 200, y: 300)

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

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

要反过来,只需颠倒过程即可。

答案 1 :(得分:1)

  

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

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

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

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