Digamos que tengo un juego que usa controles WASD en un diseño QWERTY. Intentar usar estos controles en, por ejemplo, un diseño Dvorak no es ideal (equivalente a <A:H
QWERTY). Obviamente, me gustaría usar las mismas teclas físicas que usaría QWERTY ( ,aoe
en DVORAK).
He encontrado algunas soluciones posibles:
- Forzar al usuario a usar QWERTY
- obviamente no es ideal, especialmente para usuarios internacionales
- Cambiar accesos directos basados en la distribución del teclado (WASD ->, aoe)
- me obliga a hacer mapas de diseño para cada diseño compatible (automatizable)
- más fácil para el usuario si hay más atajos que solo WASD
- Forzar al usuario a definir atajos por sí mismo
- Mas flexible
- Molesto si hay muchos atajos
- Se puede usar junto con la segunda opción
- Usar códigos de hardware
- consistente a través de teclados?
¿Cómo se maneja generalmente este tipo de cosas?
Usted debe siempre dar al jugador la posibilidad de cambiar sus asignaciones de teclas. Así es como se "maneja habitualmente": deje que el jugador los cambie. Algunos jugadores configurarán su teclado en QWERTY cuando jueguen porque eso es lo que la mayoría de los juegos esperan. Algunos los dejarán configurados en su teclado actual y dependerán de la capacidad de cambiar las teclas.
fuente
En el caso de que no pueda escuchar los códigos de escaneo (como, por ejemplo, al desarrollar un juego flash), puede hacer un enlace de teclas que funcione para la mayor cantidad de diseños posible. La mayoría de los diseños de teclado son muy similares, con solo algunas excepciones.
Los diseños de teclado que siguen a ISO 9995 (eso es todo) están organizados así:
Básicamente, las teclas negras son seguras de usar.
fuente
La mayoría de los juegos de gran presupuesto (aquellos con un distribuidor internacional) funcionarán de fábrica, usando ZQSD en lugar de WASD para diseños de azerty. Un juego decente también introducirá el diseño en el primer nivel, otros permitirán que el jugador lo descubra a través de la pantalla de personalización. La estrategia de implementación se puede detectar pidiéndole al sistema operativo que cambie de diseño. O bien el juego usa códigos de escaneo (posiciones) internamente y los asigna a códigos de teclas (símbolos) cuando muestra cuadros de diálogo y mensajes de configuración; o utiliza códigos clave internamente y detecta el diseño en el inicio o en el primer inicio.
La primera estrategia (códigos de escaneo internamente) es más sólida, pero requiere un poco de cuidado para evitar que la abstracción se filtre. Recuerde reasignar códigos de escaneo a códigos clave cuando presente claves al usuario (en tutoriales, indicaciones y diálogos de personalización). Aún tendrá que mirar los códigos clave al tomar entrada de texto (permitiendo que un jugador escriba su nombre, por ejemplo). Si necesita manejar más texto que eso, mire usando el soporte de entrada de texto de la plataforma, que está fuera del alcance de un motor de juego (maneja teclas muertas, bloqueo de mayúsculas, pegado de copia, métodos de entrada avanzados ...).
Al portar un juego que nunca usó códigos de escaneo (que no es el caso con un motor decente, ya que los códigos de escaneo también están más cerca del hardware y más rápido), la otra estrategia podría ser más práctica. Puede asignar códigos de escaneo a códigos clave utilizando las funciones SDL2 SDL_GetKeyFromScancode y SDL_GetScancodeFromKey , o equivalentes específicos de la plataforma. Si también usa el bucle de eventos SDL2, esas funciones seguirán siendo precisas en todos los conmutadores de diseño. Evite funciones como GetKeyboardLayout () en Windows; no hay garantía de que pueda encontrar el diseño en una lista conocida.
fuente