Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - KeyAdapter
Forum - Java - KeyAdapter

Avatar
killer (Normal User)
Expert


Messaggi: 217
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 16:28
Giovedì, 22/04/2010
salve....é possibile combinare l'azione di due tasti premuti?
pratikamente io ho creato una mia classe che estende KeyAdapter  con il metodo overrided public void keyPressed(KeyEvent e)   ...utilizzo lo switch(e.getKeyCode()) case KeyEvent.VK_UP:  per far muovere l'oggetto in verticale verso l'alto sul frame....ma è possibile  azionare il movimento di un oggetto in maniera trasversale tipo i giochi, premendo contemporaneamente  il tasto della freccettina UP e il tasto RIGHT(e quant'altro...)  ?!! fatemi sapere presto grazie...!

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 20:27
Giovedì, 22/04/2010
certo all'evento di tasto premuto gestisci dei valori booleani associati ai specifici tasti e poi capisci che combinazioni sono premute in base a delle maschere.

per degli esempi usando questa o altre tecniche: http://lmgtfy.com/?q=Multiple+key+detection+java

Ultima modifica effettuata da netarrow il 22/04/2010 alle 20:28
PM Quote
Avatar
killer (Normal User)
Expert


Messaggi: 217
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 11:30
Sabato, 24/04/2010
ok ci sono riuscito....praticamente adesso avrei n'altro problema interente al listener..
praticamente  quando premo 'p'  si attiva il metodo  public void pause() che contiene il settaggio degli oggetti non animati su frame .....pero come faccio a disabilitare il listener sulle frecce che premo !? cioè quando mando in pause il gioco,gli oggetti effettivamente si bloccano...pero blokkandosi io posso ancora utilizzare le freccette per spostare il mio oggetto su frame che non è animato...quindi per disabilitarlo come faccio !? ho provato in questa maniera...  removeKeyListener(new KeyAction(this)); ma non funziona niente..anzi entra proprio in errore se non erro..!! bo  !! fatemi sapere presto..grazie

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 12:50
Sabato, 24/04/2010
se tu usi KeyListener anonimi è evidente che ad ogni new ne crei uno nuovo quindi l'identità è diversa e tu togli un listener che prima non c'era (da qui l'errore).

quindi o usi un key listener nominato normalmente, dove dichiari, inizializzi e passi a parametro e usi lo stesso nome per riferirti al listener; o tiri fuori il tuo listener anonimo con getKeyListeners e sapendo che ne hai uno solo rimuoverai quello con indice 0.

se ne hai più di uno fai un ciclo per toglierli tutti, o controlla sulla doc che magari non esista un removeAllKeyListener

PM Quote
Avatar
killer (Normal User)
Expert


Messaggi: 217
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 14:47
Sabato, 24/04/2010
allora a disabilitare l'evento ci sono riuscito...pero a farlo ripartire non ci sono riuscito con l'addKeyListener(new KeyAction(this)); !!! come faccio !? magari allego il progetto cosi mi aiuti anche nel capire cosa fare per rendere il movimento dell'oggetto piu fluido perche credo non lo sia...!! lo vedo molto lento nel cambio direzione..ce qualcosa che non va....e che non capisco...
come posso risolvere questi due problemi !?...fammi sapere presto..grazie


killer ha allegato un file: TheGame.zip (1238555 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da killer il 24/04/2010 alle 14:53
PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 15:08
Sabato, 24/04/2010
Per il primo problema tu quando rimuovi il keylistener perdi la sensibilità sull'evento di pressione del tasto P, quindi riesci a rimuovere ma poi per reinserire il controllo l'evento KeyPresed non viene più scatenato.

Crea quindi due diversi KeyListener, uno per il gioco e uno per i tasto funzionali in maniera da poter rimuovere solo uno e mantenere l'altro che ti servirà per poi riattivare il primo.

Per le animazioni a scatti devi usare la tecnica del doppio buffering che consiste nel disegnare il contenuto di un controllo prima in una immagina virtuale in memoria, per poi renderizzarla a video quando l'attività computazionalmente più impegnativa è già stata fatta ma senza essere mostrata in real time all'utente (quello che causa appunto gli scatti o più similmente lo "sfarfallio").

Ultima modifica effettuata da netarrow il 24/04/2010 alle 15:09
PM Quote
Avatar
killer (Normal User)
Expert


Messaggi: 217
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 21:21
Sabato, 24/04/2010
ah ok ...pero 1) non ho mai provato ad associare 2 listener ...come si fa !? non ho capito bene in che consiste...e come faccio ad utilizzare il doppiobuffering ? sempre nello switch/case ? qualche documentazione che spiega bene il doppiobuffering potresti segnalarmela !? in google ho trovato poko di chiaro..grazie

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 21:25
Sabato, 24/04/2010
sul doppio buffering: http://java.sun.com/docs/books/tutorial/extra/fullscreen/d ...

per associare più keylistener è come associarne uno, ma dai due volte sul componente addKeyListner passando a parametro due istanze diverse del tuo adapter.

PM Quote