cocoa - raton - se puede jugar xbox con teclado y mouse
No realmente. ¿Cuál es la forma correcta de manejar la entrada del teclado en un juego con Cocoa? (2)
Digamos que está creando un juego para Mac OS X. De hecho, digamos que está creando Quake, solo que es 2011 y preferiría usar solo frameworks modernos, no obsoletos.
Quieres que tu juego sea notificado cuando el usuario presiona (o suelta) una tecla, cualquier tecla , en el teclado. Esto incluye teclas de modificador, como cambio y control. Editado para agregar: También desea saber si se presionó la versión izquierda o derecha de una tecla modificadora.
También desea que su juego tenga una pantalla de configuración, donde el usuario puede inspeccionar y modificar la configuración del teclado. Debe contener cosas como:
- Avanzar: W
- Salto: espacio
- Fuego: LCTRL
¿Qué haces? He estado tratando de encontrar una buena respuesta a esto por un día o algo así, pero no he tenido éxito.
Esto es lo que se me ha ocurrido:
- Subclase NSResponder, implementa keyUp: y keyDown :, como en esta respuesta . Un problema con este enfoque es que keyUp: y keyDown: no se llamarán cuando el usuario solo presione una tecla modificadora. Para solucionar esto, puedes implementar flagsChanged :, pero eso se siente como un hack.
- Utilice un grifo de evento de cuarzo . Esto solo funciona si la aplicación se ejecuta como root o si el usuario ha habilitado el acceso para dispositivos de asistencia. Además, los eventos de clave modificadora aún no cuentan como eventos de clave regulares.
- Usa el HIToolbox. Prácticamente no hay ninguna mención en absoluto en los 10.6 documentos del desarrollador. Parece estar muy, muy en desuso.
Entonces, ¿cuál es la forma correcta de hacer esto? Esto realmente se siente como un problema que debería tener una solución bien conocida y bien documentada. No es que los juegos sean increíblemente nicho.
Como han dicho otros, no hay nada de malo en usar -flagsChanged:
Hay otra opción: usar la API HID de IOKit. Debería estar usando esto de todos modos para la entrada del joystick / gamepad, y posiblemente la entrada del mouse; También puede o no ser conveniente para la entrada del teclado, dependiendo de lo que esté haciendo.
Esto parece prometedor:
+ [NSEvent addLocalMonitorForEventsMatchingMask: handler:]
Parece ser nuevo en 10.6 y suena como lo que estás buscando. Más aquí: