2009-12-01 12 views
5

Sto sviluppando un piccolo gioco. Io uso il seguente codice per rilevare i tasti premuti da parte del giocatore:Quanti tasti premuti possono rilevare Flash? using 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; 
     } 
    } 

L'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; 
     } 

    } 

Fondamentalmente lo shootKey saranno tenere premuto dal giocatore quasi tutto il tempo. E il ChangeColorKey verrà premuto molto spesso ma non tenere premuto. Durante i test ho notato che tenendo premuto il tasto di selezione e la freccia rivolta verso il basso, gli eventi onKeyUp per ChangeColorKey non vengono attivati. Tenere premuto il tasto freccia su o giù anziché la freccia destra ha lo stesso effetto. Se tengo il tasto freccia sinistra, gli eventi vengono sparati. Perché si trova? C'è qualcosa che non va nel mio codice?

risposta

4

Il problema che state vedendo non è correlato al codice, ma alla tastiera. A seconda della tecnologia della tastiera, il numero e le combinazioni di tasti che è possibile premere contemporaneamente variano. Ho fatto un codice molto simile al tuo un paio di anni fa e ricordo di avere lo stesso problema che hai menzionato, mentre con la mia attuale tastiera non succede più (sembra che questo possa supportare fino a cinque lettere simultanee mentre il vecchio ne supporta tre) .

+0

E un paio di articoli su questo problema (e anche su come hackerare una tastiera). http://www.extremetech.com/article2/0,2845,2301151,00.asp http://www.extremetech.com/article2/0,2845,1656177,00.asp Sembra solitamente usb le tastiere supportano fino a sei chiavi simultanee, quindi se hai una vecchia tastiera potrebbe essere un buon momento per aggiornarla. – LopSae

1

mi consiglia di utilizzare la libreria Keypoll, si può trovare qui: http://code.google.com/p/bigroom/wiki/KeyPoll.

Per quanto riguarda quanti tasti è possibile tenere premuto, non sono sicuro, ma provare a usare ctrl, shift come di solito non conta fino al limite (non l'ho testato in Flash/ActionScript).

+0

Ho provato classe KeyPoll e mostrava lo stesso problema con i tasti. – Ricardo

+0

Ok, correttamente una limitazione di Flash quindi. Hai provato a usare ctrl e shift per alcune delle funzionalità? –

2

Credo che il problema ha a che fare con la tastiera hardware anche. Ho testato il codice da solo sulla mia tastiera e non posso premere più di 3 tasti contemporaneamente su una tastiera non USB.

Ora nel tuo esempio, che non dovrebbe essere un problema, perché non hai mai necessario premere più di 3 chiavi. Ma attenzione! C'è un altro limite che sembra essere nella tastiera hardware e ha a che fare con la vicinanza dei tasti che si premono l'uno con l'altro. Ad esempio, quando provi il tuo codice, sembrava che non potessi ricevere un KEY_UP quando avevo altri due tasti KEYed_DOWN (che significava premuto continuamente) accanto a quello che sto KEYing_UP (quindi quello che voglio ricevere il KEY_UP). evento key_up per). Quindi credo che sia per questo che il tuo codice funziona solo con il tasto freccia a sinistra. I tasti freccia su, giù e destra sono probabilmente, in qualche modo, troppo vicini a changeColorKey e, a causa di ciò, (sto indovinando a causa di come il circuito è fatto in una tastiera) non possono attivarlo.

provare a spostare lo shootKey e/o la changeColorKey da qualche altra parte, più lontano e vedere se funziona.

Problemi correlati