2009-12-01 20 views
5

Estoy desarrollando un pequeño juego. Yo uso el siguiente código para detectar las teclas pulsadas por el jugador:¿Cuántas teclas presionadas puede detectar Flash? usando as3

private function onKeyDown(event:KeyboardEvent):void { 
     //moviment keys 
     if (event.keyCode == 37 || event.keyCode == 65) { 
      this.leftKeyPressed = true; 
     } 
     if (event.keyCode == 39 || event.keyCode == 68) { 
      this.rightKeyPressed = true; 
     } 
     if (event.keyCode == 38 || event.keyCode == 87) { 
      this.upKeyPressed = true; 
     } 
     if (event.keyCode == 40 || event.keyCode == 83) { 
      this.downKeyPressed = true; 
     } 

     if (event.keyCode == this.shootKey) { 
      this.shootKeyPressed = true; 
     } 
    } 

El evento onKeyUp:

private function onKeyUp(event:KeyboardEvent):void { 
     if (event.keyCode == 37 || event.keyCode == 65) { 
      this.leftKeyPressed = false; 
     } 
     if (event.keyCode == 39 || event.keyCode == 68) { 
      this.rightKeyPressed = false; 
     } 
     if (event.keyCode == 38 || event.keyCode == 87) { 
      this.upKeyPressed = false; 
     } 
     if (event.keyCode == 40 || event.keyCode == 83) { 
      this.downKeyPressed = false; 
     } 
     if (event.keyCode == this.shootKey) { 
      this.shootKeyPressed = false; 
     } 
     if (event.keyCode == changeColorKey) { 
      trace('color key released'); 
      trace(getTimer()); 
      this.changeColorKeyPressed = true; 
     } 

    } 

Básicamente, el shootKey se mantenga pulsado por el jugador casi todo el tiempo. Y el changeColorKey se presionará muy a menudo pero no se mantendrá presionado. Durante las pruebas, observé que al mantener pulsada la tecla disparada y la flecha hacia la derecha, los eventos onKeyUp para changeColorKey no se disparan. Manteniendo presionada la tecla de la flecha hacia arriba o hacia abajo en lugar de la flecha hacia la derecha tiene el mismo efecto. Si mantengo presionada la tecla de flecha izquierda, los eventos se disparan. ¿Por qué ocurre? ¿Hay algún problema con mi código?

Respuesta

4

El problema que está viendo no está relacionado con su código, sino con su teclado. Dependiendo de la tecnología del teclado, el número y las combinaciones de teclas que puede presionar varían simultáneamente. Hice un código muy similar al tuyo hace un par de años y recuerdo tener el mismo problema que mencionas, mientras que con mi teclado actual ya no sucede (parece que puede admitir hasta cinco letras simultáneas mientras que el anterior admite tres) .

+0

Y un par de artículos sobre este tema (e incluso cómo hackear un teclado). http://www.extremetech.com/article2/0,2845,2301151,00.asp http://www.extremetech.com/article2/0,2845,1656177,00.asp Parece usb usb los teclados admiten hasta seis teclas simultáneas, por lo que si tiene un teclado anterior, este puede ser un buen momento para actualizarlo. – LopSae

1

Recomendaría usar la biblioteca de Keypoll, la puede encontrar aquí: http://code.google.com/p/bigroom/wiki/KeyPoll.

En cuanto a la cantidad de teclas que puede mantener presionadas, no estoy seguro, pero intente usar ctrl, shift ya que normalmente no cuenta hacia el límite (no lo he probado en Flash/ActionScript).

+0

Probé la clase KeyPoll y mostró el mismo problema con las teclas presionadas. – Ricardo

+0

Bien, correctamente una limitación Flash entonces. ¿Intentó y usó ctrl y shift para algunas de las funcionalidades? –

2

Creo que el problema tiene que ver también con el teclado de hardware. He probado el código yo mismo en mi teclado, y no puedo presionar más de 3 teclas al mismo tiempo en un teclado que no sea USB.

Ahora en su ejemplo, eso no debería ser un problema, porque nunca necesita presionar más de 3 teclas. ¡Pero ten cuidado! Hay otra limitación que parece estar en el teclado del hardware y tiene que ver con la proximidad de las teclas que está presionando entre sí.

Por ejemplo, cuando probaba su código, parecía que no podía recibir KEY_UP cuando tenía otras dos teclas KEYed_DOWN (que significa presionada continuamente) al lado de la que estoy KEYing_UP (entonces la que quiero recibir el evento key_up para). Así que creo que es por eso que su código solo funciona con la tecla de flecha izquierda. Sus teclas de flecha hacia arriba, hacia abajo y hacia la derecha están probablemente, de alguna manera, demasiado cerca de la ChangeColorKey y debido a esto, (supongo que debido a cómo se hace el circuito en un teclado) no puede activarlo.

Intenta mover el shootKey y/o el changeColorKey en otro lugar, más lejos y ver si eso funciona.

Cuestiones relacionadas