0

我试图将 mouseListener 和 mouseMotionListener 添加到我的游戏中,并注意到我可以将它们添加到 Canvas 或 JFrame。我将其添加到两者还是其中之一?

4

2 回答 2

1

我推荐的是使用画布。当您使用任何类型的侦听器时,请考虑操作将在何处发生。您的所有更新都发生在框架上还是画布上?如果是后者,请使用画布处理所有动作侦听器对象。

另一种思考方式是,JFrame 只是一个包含游戏实现的窗口。您的图形更新、键盘输入、鼠标输入和任何其他功能都是通过画布完成的。

例如,将 JFrame 和画布与 Skyrim 的这张图像进行比较。外部的窗口(一个 JFrame 对象)具有关闭/最小化功能,并且该窗口包含游戏屏幕(一个 Canvas 对象)。

在此处输入图像描述

于 2017-12-12T04:16:02.007 回答
0

将其附加到画布上

您应该将鼠标侦听器添加到画布,原因之一是: 坐标。

如果将鼠标侦听器附加到框架,则坐标的 0 点将位于JFrame 边框的左上角。很难计算相对于画布的坐标。

而不是您可以将鼠标侦听器附加到 Canvas。有了这个坐标会更好。但不要忘记在添加监听器后将注意力集中在画布上:

canvas.addMouseMotionListener(motionListener);
canvas.requestFocus();
于 2017-12-12T04:36:54.707 回答