Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Pinball2D

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    25

    Pinball2D

    Ciao a tutti. Ho realizzato un pinball in 2d in applet java e adesso ho deciso di trasformarlo in semplice applicazione in java. Ho fatto tutte le modifiche necessarie e il gioco benomale funziona unica pecca il doppiobuffer che non va (in applet funziona perfettamente).
    questo è un pezzo del codice:
    codice:
    class MuoviCerchio extends JPanel implements ActionListener{ 
          ...
          private Timer timer;    //timer per la gestione dell'animazione
          private Image img; //immagine rimbalzanti 
          private Image sfondo; //immagine sfondo 
          ...
          private Image buffervirtuale;//immagine del buffer virtuale 
          private Graphics b_graph;
          public MuoviCerchio(){
                ...
                timer=new Timer(millisec,this); 
                timer.start(); 
                Toolkit toolkit = Toolkit.getDefaultToolkit(); 
                ball=toolkit.getImage("ball.png"); 
                sfondo=toolkit.getImage("sfondo.png"); 
                ...
                buffervirtuale= createImage(this.getSize().width ,this.getSize().height);
                b_graph=buffervirtuale.getGraphics();//qui durante la compilazione mi da un errore
                                                     //e il gioco non viene avviato
        }
        public void actionPerformed(ActionEvent e){
           ...
        }
        public void update(Graphics g){
            paint(g);
        }
        public void paint(Graphics g){
            g.drawImage(buffervirtuale,0,0,this);
            b_graph.drawImage(sfondo,0,0, this);//sfondo
            ...
            
        }
    }
    qualcuno saprebbe spiegarmi per quale motivo mi genera questo errore e come posso risolverlo???
    ps:se non uso il doppiobuffer ovviamente viene fuori lo sfarfallio

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

    Re: Pinball2D

    Originariamente inviato da vale69
    codice:
    buffervirtuale= createImage(this.getSize().width ,this.getSize().height);
    Dalla documentazione di createImage:
    The return value may be null if the component is not displayable.

    E dalla documentazione di isDisplayable() di Component:
    A component is made displayable either when it is added to a displayable containment hierarchy or when its containment hierarchy is made displayable. A containment hierarchy is made displayable when its ancestor window is either packed or made visible.

    E c'è anche un'altra questione correlata a questo: se il tuo pannello MuoviCerchio non è ancora "displayable", il getSize() dà una dimensione di 0x0.

    Detto in altro modo: devi eseguire quella riga dopo che il pannello è diventato "displayable".
    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
    May 2011
    Messaggi
    25
    ho capito che la posizione del
    codice:
    buffervirtuale= createImage(this.getSize().width ,this.getSize().height);
    b_graph=buffervirtuale.getGraphics();
    è sbagliata ma non ho ben capito dove devo inserirli...Potresti essere più preciso? Ho provato dentro il paint ma mi da errore, ovviamente, per lo stesso motivo di prima.

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.