此处的人士一直建议我在Java 2D游戏中使用Key Binding而不是KeyListener
。
每个人的优点和缺点是什么?关键绑定对于2D游戏真的更好吗?
答案 0 :(得分:8)
KeyListener
是一个更低级别的API,它要求注册的组件聚焦并具有键盘焦点。例如,如果您的游戏中有其他组件可能会占用键盘焦点,则可能会出现问题。
KeyListener
通常更难以维护,扩展或更改,因为通常所有关键事件都通过单个侦听器进行引导,因此所有游戏控件都来自此单一位置。
(现在想象你想添加其他控件,比如按钮甚至操纵杆或控制器混合 - 你突然有任意数量的输入集线器你需要考虑,保持最新和同步:P)
Key Bindings API旨在提供可重复使用的Action
,可用于Swing API的各个不同部分,同时使桌面应用程序开发更容易,也可以使其更容易在开发游戏时......
除了您现在可以控制生成事件的焦点级别之外,您还可以灵活地定义可以映射到不同操作的可配置键
例如......
您定义了一个Up
Action
,可以让您的角色向上移动。这与任何事件都脱节了。这意味着,Action
并不关心它是如何被触发的,只关注它被触发时应该做什么。
您现在可以自由定义触发此操作的击键。关于这一点的重要部分突然有能力为用户提供定制,因此他们可以实际定义他们想要的动作的关键笔划 - 例如,无需设计自己的某种键映射系统。 / p>
这也意味着您可以以各种不同的方式使用相同的Action
(甚至同一个实例)。例如,您可以将Action
绑定到按键并将其添加到按钮,如果您有足够的勇气尝试,甚至将其绑定到另一个输入设备(如操纵杆或控制器)......但是你' d需要自己构建API来实现它,但这意味着您突然对所有用户输入都有一个API概念,例如......
答案 1 :(得分:0)
后来介绍了键绑定。它们将动作映射到特定键,而侦听器只是监听按下哪些键。说实话,你使用哪一个并不重要,但使用键绑定总是更好。
还有许多可用的库,它们各有优缺点。对于2D游戏,键绑定应该没问题。但请注意,建议不要在游戏开发中使用Java API。如果您想要构建3D或内容丰富的2D游戏,那么使用OpenGL会好得多。尝试LWJGL或JOGL(一般是首选LWJGL)或者您可以使用Slick2D或LibGDX等游戏引擎。