KeyListener与键绑定

这里的人们一直建议我在Java 2D游戏中使用Key Binding而不是KeyListener

每个人的优点和缺点是什么? 2D游戏的关键绑定真的更好吗?

KeyListener是一个更低级别的API,它要求注册的组件被聚焦并具有键盘焦点。 例如,如果您的游戏中有其他组件可能会占用键盘焦点,则可能会出现问题。

KeyListener通常更难以维护和扩展或更改,因为通常所有关键事件都通过单个侦听器引导,因此所有游戏​​控件都来自此单个位置。

(现在想象你想要添加其他控件,例如按钮甚至操纵杆或控制器来混合 – 你突然有任何数量的输入集线器你需要考虑,保持最新和同步:P)

Key Bindings API旨在提供可重复使用的Action ,可以在Swing API的各个不同部分中使用,同时这使桌面应用程序开发更容易,它也可以使开发游戏时更容易…

除了您现在可以控制生成事件的焦点级别之外,您还可以灵活地定义可配置的键,这些键可以映射到不同的操作

例如…

您可以定义一个Up移动的Up Action 。 这与任何事件都脱节了。 这意味着, Action并不关心它是如何被触发的,而是它触发时它应该做什么。

您现在可以自由定义触发此操作的击键。 关于这一点的重要部分突然有能力为用户提供定制,因此他们可以实际定义他们想要的动作的关键笔划 – 例如,无需设计自己的某种键映射系统。

它还意味着您可以以各种不同的方式使用相同的Action (甚至同一个实例)。 例如,您可以将Action绑定到键击并将其添加到按钮,如果您足够勇敢尝试,甚至将其绑定到另一个输入设备(如操纵杆或控制器)……但您需要构建API本身就是为了实现它,但它意味着您突然对所有用户输入都有一个API概念,例如……

密钥绑定稍后介绍。 它们将动作映射到特定键,而侦听器只是监听按下哪些键。 说实话,你使用哪一个并不重要,但总是更喜欢使用键绑定。

还有许多库可用,它们有其优点/缺点。 对于2D游戏,键绑定应该没问题。 但请注意,不建议使用Java API进行游戏开发。 如果您想要构建3D或内容丰富的2D游戏,那么使用OpenGL会好得多。 尝试LWJGL或JOGL(一般首选LWJGL)或者您可以使用Slick2D或LibGDX等游戏引擎。