KeyListener vs. enlaces clave

La gente aquí me sigue sugiriendo usar Key Binding en lugar de KeyListener en juegos Java 2D.

¿Cuáles son las ventajas y desventajas de cada uno? ¿Los enlaces de teclas son realmente mejores para los juegos en 2D?

KeyListener es una API de nivel mucho más bajo que requiere que el componente que está registrado esté enfocado Y tenga el foco del teclado. Esto puede causar problemas cuando tienes otros componentes dentro de tu juego que pueden agarrar el foco del teclado, por ejemplo.

KeyListener generalmente es más difícil de mantener y extender o cambiar, ya que normalmente, todos los eventos clave se canalizan a través de un solo oyente, por lo que TODOS los controles del juego se originan desde esta posición única.

(Ahora imagine que desea agregar otros controles, como botones o incluso joystick o controladores para mezclar; de repente tiene cualquier cantidad de concentradores de entrada que necesita considerar, mantenerse actualizado y sincronizado: P)

La API Key Bindings ha sido diseñada para proporcionar Action reutilizables que se pueden utilizar en una variedad de partes diferentes de la API de Swing, mientras que esto hace que el desarrollo de aplicaciones de escritorio sea más fácil, también puede facilitar el desarrollo de juegos …

Además del hecho de que ahora obtienes control sobre el nivel de foco que se generan los eventos, también obtienes la flexibilidad para definir claves configurables que se pueden asignar a diferentes acciones.

Por ejemplo…

Usted define una Action Up , que mueve su personaje hacia arriba. Esto está divorciado de cualquier evento. Eso significa que a la Action no le importa cómo se activa, solo qué debería hacer cuando se activa.

Ahora puede definir la pulsación de tecla que desencadenaría esta acción. La gran parte de esto, de repente, es la capacidad de proporcionar personalización al usuario, por lo que realmente puede definir el trazo clave que desea para la acción, por ejemplo, sin tener que diseñar algún tipo de sistema de asignación de teclas propio.

También significa que puede usar la misma Action (e incluso la misma instancia) en una variedad de formas diferentes. Por ejemplo, puedes vincular la Action con un trazo de tecla y agregarlo al botón, y si eres lo suficientemente valiente como para intentarlo, incluso vincularlo a otro dispositivo de entrada (como un joystick o un controlador) … pero necesitarías construir la API usted mismo para lograrlo, pero significa que de repente tiene un solo concepto de API para toda su entrada de usuario, por ejemplo …

Las vinculaciones clave se introdujeron más tarde. Ellos asignan acciones a teclas específicas mientras que un oyente simplemente escucha las teclas presionadas. Para ser honesto, realmente no importa cuál uses, pero siempre es preferible usar enlaces de teclas.

También hay muchas bibliotecas disponibles que tienen sus ventajas / desventajas. Sin embargo, los enlaces de teclas deberían estar bien para un juego en 2D. Sin embargo, tenga en cuenta que el uso de la API de Java no se recomienda para el desarrollo de juegos. Si alguna vez desea construir 3D o juegos 2D ricos en contenido, es mucho mejor usar OpenGL. Pruebe LWJGL o JOGL (generalmente se prefiere LWJGL) o puede usar un motor de juegos como Slick2D o LibGDX.