Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755

    problema con JPanel e disegno

    In un gioco creato da me(tetris) ho un jpanel al quale voglio impostare lo sfondo...inizialmente ho fatto impostare lo sfondo tramite il metodo paintComponent del pannello ma in questo modo,dovendo il gioco fare continuamente numerosssimi repaint,viene ralentato il gioco.
    Ho pensato così di fare un qualcosa all'interno del costruttore del pannello,facendo in questo modo:
    codice:
    Class Pannello extends JPanel{
    public Pannello(){
    ...
    ....
    ...
    Graphics g=getGraphics();
    g.drawImage(img);     //dove img è una già creata BufferedImage
    ...
    ...
    }
    }
    ma poi avviandola tramite un main (dopo averla inserita in una frame eccetera) mi dà un NullPointerException alla riga "g.drawImage(img);"
    perchè?dove sbaglio?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: problema con JPanel e disegno

    Originariamente inviato da zipangulu
    Ho pensato così di fare un qualcosa all'interno del costruttore del pannello
    No.

    O fai un pannello che disegna solo lo sfondo e dentro contiene un altro pannello "trasparente" che disegna solo gli "oggetti" da gestire.

    Oppure fai un pannello che disegna tutto quanto, sfondo+oggetti. Ma il repainting lo devi chiedere in modo "furbo", cosa peraltro che nel caso di un "tetris" viene l'ideale. Ovvero sfruttare il repaint(int x, int y, int width, int height) .
    Se un oggettino si muove, non devi chiedere un repaint() totale ma si può chiedere solo della porzione che è la "unione" di zona vecchia+zona nuova dell'oggettino. Così quando nel paintComponent() disegni qualunque cosa, tutto il painting viene "clippato" (non mi viene ora la traduzione ...) in quell'area.

    E se ci deve essere una animazione ancora più sofisticata, si può sfruttare anche il painting "al volo", ovvero direttamente a seguito dell'evento si disegna sul Graphics. Ma chiaramente bisogna tenere traccia della modifica in modo che un successivo paintComponent() possa comunque ridisegnare tutto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    ho capito tt qll che hai detto.grazie
    Una curiosità il colore trasparente come si imposta?

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    ho risolto col setOpaque(false)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.