java - KeyListener 与键绑定(bind)

标签 java swing awt keylistener key-bindings

这里的人一直建议我在 Java 2D 游戏中使用键绑定(bind)而不是 KeyListener

各自的优缺点是什么? Key Bindings 真的更适合 2D 游戏吗?

最佳答案

KeyListener 是一个低得多的 API,它要求它注册的组件具有焦点并且具有键盘焦点。例如,当您的游戏中有其他组件可能会占用键盘焦点时,这可能会导致问题。

KeyListener 通常更难维护、扩展或更改,因为通常情况下,所有按键事件都通过单个监听器传送,因此所有游戏​​控件都源自这个位置。

(现在假设您想要添加其他控件,例如按钮甚至操纵杆或 Controller 以进行混合 - 您突然有任意数量的输入集线器需要考虑,保持最新和同步:P)

Key Bindings API 旨在提供可重用的 Action,可用于 Swing API 的各种不同部分,同时这使得桌面应用程序开发更容易,它还可以使开发游戏更容易...

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

例如……

您定义了一个Up Action,它将您的角色向上移动。这是脱离任何事件的。这意味着,Action 不关心它是如何触发的,只关心它在触发时应该做什么。

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

这也意味着您可以以多种不同的方式使用相同的Action(甚至是相同的实例)。例如,您可以将 Action 绑定(bind)到击键并将其添加到按钮,如果您有足够的勇气尝试,甚至可以将其绑定(bind)到另一个输入设备(如操纵杆或 Controller )...但是你需要自己构建 API 来实现它,但这意味着你突然有了一个 API 概念来处理所有用户输入,例如......

关于java - KeyListener 与键绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20873255/

相关文章:

java - Graphics2D - 在所有平台上呈现相同的文本

java - 访问 Swing JSlider 的拇指/ handle /旋钮

java - 从 GUI 搜索文本文件

java - 从 BufferedImage 到 SWT Image 的转换

java - 如何使用备用事件队列显示 Java 对话框?

java - 如何使用 JTabbedPane 将多个 JPanel (3) 放入一个 JPanel 中?

java - 多对多 jpa stackoverflow

java - 如何从 Phonegap 插件更改 native 元素?

java - Linux下的Arduino(RXTX)? - 适用于 Windows

java - LibGDX 平铺 : Tile map as 2D array