Oppure

Loading
22/04/10 14:28
killer
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...!
aaa
22/04/10 18:27
netarrow
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: lmgtfy.com/
Ultima modifica effettuata da netarrow 22/04/10 18:28
aaa
24/04/10 9:30
killer
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
aaa
24/04/10 10:50
netarrow
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
aaa
24/04/10 12:47
killer
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
Ultima modifica effettuata da killer 24/04/10 12:53
aaa
24/04/10 13:08
netarrow
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 24/04/10 13:09
aaa
24/04/10 19:21
killer
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
aaa
24/04/10 19:25
netarrow
sul doppio buffering: java.sun.com/docs/books/tutorial/extra/fullscreen/…

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