Detectar si el browser tiene teclas de keyboard / flecha en la página web.

Tengo un juego de pantalla completa en HTML + JavaScript, que utiliza las teclas de flecha como controles primarios. Esto no se puede utilizar en dispositivos con Android sin keyboard (no he probado en iOS), e incluso si el keyboard suave tuviera teclas de flecha ocuparía espacio innecesario. Por lo tanto, he agregado botones de control en pantalla. Sin embargo, los botones son innecesarios (y absurdamente grandes) en los browseres de escritorio, por lo que me gustaría que no aparecieran a less que fueran necesarios.

¿Qué heurística puedo usar para decidir si son necesarios? Es decir, si es imposible o incómodo para el usuario ingresar events de teclas de flecha, aparte de reconocer agentes de usuario específicos (que es sencillo, pero no a testing para el futuro).

Por supuesto, permitiré que el usuario oculte / muestre los botones; Estoy buscando heurísticas útiles para elegir la configuration pnetworkingeterminada.

No es necesario ningún olfato de agentes de usuario, opciones de configuration ni ningún tipo de adivinanzas. Solo haz esto:

  1. Tenga una pantalla de título que diga "presione para continuar".
  2. Al hacer clic o presionar la tecla, oculta los controles táctiles y comienza el juego.
  3. Al tocar, muestra los controles táctiles y comienza el juego.

Ni siquiera necesitabas mencionar la opción al usuario y detectaste automáticamente su control preferido a la perfección.

Utilice la function de detección con Modernizr: http://www.modernizr.com/docs/#touch

Si bien esta no es una manera confiable de verificar si el usuario tiene un keyboard, es definitivamente confiable para ver si el browser es capaz de tocar.

Si solo tiene flechas (izquierda / derecha / arriba / abajo), ¿podría considerar agregar events táctiles dentro del campo del juego? Esto no ocuparía espacio, obviamente, ya que está en capas en la parte superior del juego, por lo que podría estar 'siempre encendido'.

  • Un usuario de la computadora ni siquiera sabría que está allí, aunque él / ella podría usarlos para jugar tu juego con un mouse, supongo.

  • El usuario del dispositivo táctil, por otro lado, puede usar mucho más fácilmente las "áreas" (mediados de arriba, mitad izquierda, mitad abajo y mitad derecha, por ejemplo) debido a … bien … tocar en lugar de usar un mouse.

Esto puede necesitar algunas explicaciones, ya que probablemente no querrás que los puntos sean visibles para el usuario, pero se siente como una opción válida.

Incluso si tiene 4 botones y un 'fuego', puede hacer esto, por ejemplo, agregando una sección 'media'.

busque events específicos del tacto, como touchstart o gesturestart, y muestre los controles en pantalla si se detectan.

http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html

No estoy seguro si el sistema-info api ha sido implementado por cualquier browser: http://www.w3.org/TR/system-info-api/

en lugar de mostrar el keyboard en pantalla de manera pnetworkingeterminada, agregue un button para alternar la visualización del keyboard en pantalla.

También podría ser prudente darle al keyboard en pantalla la capacidad de cambiar el tamaño.

Editar para responder la pregunta:

El keyboard debe estar oculto de forma pnetworkingeterminada si la mayoría de sus usuarios van a estar en una computadora,

Visible por defecto si la mayoría de sus usuarios van a estar en un dispositivo mobile.

En lugar de tratar de adivinar, conviértalo en una opción de configuration para que el usuario elija.

Una forma alternativa sería vincular los events de desliza- miento y los códigos de teclas a las mismas funciones, para que ambos funcionen al mismo time (seguro que depende de si el juego acepta golpes o tiene algunos controles de joypad en la pantalla).

Esto incluso cubre el des-avance mencionado en los comentarios de la respuesta, que acabo de notar.

En la mayoría de los casos, los controles de toque en pantalla son demasiado difíciles de usar (S-NES Emu).

Los mejores que he usado hasta ahora fueron los de Bard's Tale for Droid.

Consejo: lo mejor para controlar el movimiento direccional en un juego sería el evento tap-hold. Por lo tanto, uno puede mantener pulsado … necesita una línea de construcción invisible entre el cursor y el centro de la pantalla para medir los grados del vector de movimiento.

Probablemente incluso se podría controlar la velocidad por el valor de la presión, simplemente no estoy seguro de si se puede acceder a la propiedad desde JavaScript, o si esto solo está disponible en Android SDK?

En Parallel Kingdom, uno se mueve con un solo toque (pero el personaje no siempre está en el medio de la pantalla, al igual que con el método tap-hold mencionado anteriormente).

Puede usar javascript para conocer la altura del puerto de vista de Windows y luego una statement if que dice:

 if ($(window).height() <= "960")) { //Your code to display keyboard controls //PS 960 is height of iPhone 4+ screen } 

Edit: Left out) al final de $(window).height() <= "960"