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等游戏引擎。