PDA

View Full Version : [JAVA] problema sviluppo di una versione del Mahjong


mat25nt
14-04-2012, 12:33
Salve a tutti, seguo da parecchio il forum e (per fortuna) non ho mai dovuto richiedere il vostro aiuto....ma adesso è arrivato il momento.
Sono uno studente di ing. informatica e devo sviluppare un gioco in Java con GUI come tesina per un lab di programmazione. Ho deciso di creare una mia versione del Mahjong Solitario (esempi http://www.mahjongdragon.com/indexit.php)
Arrivo al sodo, la struttura del programma è basilare:
-classe che crea singole tessere (figura Path2D)
-classe che crea i diversi strati di tessere (estensione delle JLabel ma ha funzionato anche come JLayeredPane)
-classe di metodi di ricerca
-classe di override del glassPanel per poter evidenziare le tessere e intercettare gli eventi del mouse
-classe gestione audio (da finire)
-classe main (estende il JFrame e ci appiccico tutto sopra :D )
Il problema nasce dal fatto che usando i metodi a disposizione dalle librerie geom, awt e swing per la gestione dei punti e coordinate (contains(double x, double y) e contains(Point2D) etc etc) ottengo sempre un bel "false" ad ogni click sebbene ho ricontrollato le posizioni degli elementi facendomeli stampare....
Ho controllato sulle API e ricontrollato, so che quando il glassPane intercetta tutti gli eventi e non li fa passare ai contenitori sottostanti, ma io ho previsto dei metodi che passano le coordinate del click alle istanze delle tessere. Può essere questo il problema?
Qualche idea??

PGI-Bis
14-04-2012, 14:02
Sembra un problema di trasformazioni nel senso che se ottieni il punto del mouse dal glasspane - o da un qualsiasi altro componente - le coordinate del punto sono relative allo spazio di coordinate del glasspane.

Se vuoi propagare manualmente le coordinate di quel punto ad un altro componente devi anche trasformare manualmente le sue coordinate.

La classe SwingUtilities ha due metodi ad hoc, convertMouseEvent e convertPoint, con i quali puoi trasformare le coordinate di un MouseEvent o di un Point dallo spazio di un componente X allo spazio di un componente Y (nel tuo caso dal glasspane al componente che contiene le geometrie delle tessere).

mat25nt
14-04-2012, 17:05
cavolo, ho provato ma non funziona ancora. Ma il component che è la destinazione delle nuove coordinate deve essere il mio oggetto "contenitore" delle tessere oppure il jlayeredpane del jframe su cui l'ho messo?
Se la risposta è la seconda dovrò ben rimboccarmi le maniche e riscrivere un pò di roba....:cry:

PGI-Bis
14-04-2012, 17:20
la destinazione è il contenitore delle tessere. Quando verifichi il contenimento stampa sulla console le coordinate del mousevent e l'area degli Shape2D, vedi subito se c'è qualcosa di strano nel punto del mouse rispetto a dove si trovano le tessere.

mat25nt
16-04-2012, 16:52
ancora niente da fare... scusate l'ignoranza ma ho sempre lavorato con contenitori non sovrapposti, non è che avendo reso visibile e interagibile il glassPane, tutti gli altri contenitori sono come "bloccati"??

EDIT: problema risolto, un paio di variabili che erano rimaste non inizializzate facevano in modo che il pane che contiene le tessere fosse senza larghezza nè altezza (grazie al cassio che non risultava cliccato!!!). Comunque le tessere mi rimangono non selezionate, a questo punto è un bel errorozzo di scrittura che mi devo riguardare!!!