Visualizzazione risultati 1 fino 5 di 5

Discussione: Java: ridurre l'"effetto palpebra"

  1. #1
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito Java: ridurre l'"effetto palpebra"

    Ho un problemino di carattere visivo su alcune delle applet nella mia pagina, in particolare su questa: http://dementialsite.altervista.org/?warp=sudokube

    Il gioco in sé funziona e si vede anche bene, non fosse altro che, per poter visualizzare il timer in basso a destra e aggiornarlo ogni secondo, sono costretto a fare il repaint() di tutta l'applet (400 x 400 pixel). Quello che ne risulta è un vero e proprio "effetto palpebra", che costringe a propria volta a sbattere le palpebre per ridurne gli effetti.

    Chiedo: c'è un modo per abbattere o almeno ridurre questo effetto, magari ridisegnando solo la parte dell'applet modificata? Questo il codice del Thread che aggiorna il cronometro, se può essere utile:
    Codice:
        private int time;
    
        private class Chronometer extends Thread
        {
            private boolean on = true;
            
            public Chronometer ()
            {
                time = 0;
            }
    
            public void run ()
            {
                Thread me = Thread.currentThread ();
                while (this == me)
                {
                    try
                    {
                        Thread.sleep (1000);
                    }
                    catch (InterruptedException ie) {}
                    if (this.on)
                    {
                        time++;
                        repaint ();
                    }
                }
            }
            
            public void destroy ()
            {
                this.on = false;
            }
        }
    Grazie a chi risponde... statemi bene...

    P.S. Anche se a qualcuno non sembra, non ho scritto questo post per farmi di nuovo la marchetta...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  2. #2
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    L'effetto "palpebra" come lo chiami tu, ovvero il "flickering" del repaint, è dovuto al non aver adottato un sistema di rendering con "Double Buffer" -come lo chiamano molti altri -
    Anticamente, come primo passo bastava ridurre il repaint sovrascrivendo il metodo update() (che ricancella tutto per preparare un nuovo repaint, assolutamente da evitare), in questo modo:
    public void update(Graphics g) { paint(g); }

    Poi il discorso in soldoni del "double buffering" significa: invce di disegnare nel contesto grafico attuale man mano (e a video si nota), prima disegno tutto in un graphics non visibile (off-screen image) e poi semplicemente nel graphics del mio componente disegno in una botta secca questa immagine bella e pronta.

    Consiglio di cercare su Google "flicker free animation java"
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  3. #3
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Grazie per le dritte... ho risolto aggiungendo il metodo update() come l'hai scritto tu e modificando così il metodo paint():
    Codice:
    public void paint ()
    {
       Image img = this.createImage (400, 400);
       Graphics2D g2 = (Graphics2D) img.getGraphics ();
       // ... qui il metodo paint tal quale a com'era prima
       g.drawImage (img, 0, 0, this);
    }
    Però ho un piccolo problema (che peraltro avevo già segnalato in un altro thread): nella copia locale mi si caricano le applet così modificate e ricompilate alla perfezione, andando sul mio sito vedo ancora la prima versione dell'applet (alla quale non avevo ancora inserito il cronometro!). Da cosa può dipendere questo?

    Statemi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  4. #4
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Citazione Originalmente inviato da dementialsite
    Però ho un piccolo problema (che peraltro avevo già segnalato in un altro thread): nella copia locale mi si caricano le applet così modificate e ricompilate alla perfezione, andando sul mio sito vedo ancora la prima versione dell'applet (alla quale non avevo ancora inserito il cronometro!). Da cosa può dipendere questo?
    Io mi ricordo un thread in cui si diceva che gli applet occupano sia la cache dei browser che quella di Java.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  5. #5
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Risolto... ho svuotato e disattivato la cache di Java :-D

    Grazie a tutti... Statemi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •