Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [Java] Problema repaint()

    Ciao a tutti, sono alle prime armi con Java e sto facendo un applet java che consiste nel gioco degli scacchi tra due utenti.
    Ho disegnato la scacchiera con tutti i pezzi impostati nella posizione iniziale e un utente può prendere il pezzo e trascinarlo in giro per la scacchiera. Però quando un utente trascina con il mouse il pezzo io ridisegno tutta la scacchiera con tutti i pezzi nella loro posizione attuale e il pezzo trascinato dall'utente lo ridisegno dove c'è il mouse. In sostanza gestisco la mouseDragged in modo che mi ridisegni(quindi chiamando la repaint()) il pezzo ogni volta che lo trascino in giro per la scacchiera.
    Se andate sul sito nel quale ho caricato l'applet vedrete che ogni volta che si trascina il pezzo si vede che la pagina si aggiorna. Come posso risolvere questo problema?

    Comunque, quando mi connetto al sito dal mio pc fisso, su cui gira xp, l'applet funziona senza che si veda il refresh della pagina ma quando mi connetto dal portatile su cui gira seven(ma non penso che conti questo) sul sito si vede il refresh.

    Il sito è all'indirizzo: www.giochimisti.altervista.org

    Grazie a tutti per l'aiuto. Ciao Simone

  2. #2

    Re: [Java] Problema repaint()

    Originariamente inviato da Kalaz_89
    Se andate sul sito nel quale ho caricato l'applet vedrete che ogni volta che si trascina il pezzo si vede che la pagina si aggiorna. Come posso risolvere questo problema?
    Non devi fare il repaint() mentre il mouse viene trascinato...! Conviene farlo al rilascio.

  3. #3
    mmm, allora come faccio a ridisegnare il pezzo mentre lo si trascina ?

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

    Re: [Java] Problema repaint()

    Originariamente inviato da Kalaz_89
    Se andate sul sito nel quale ho caricato l'applet vedrete che ogni volta che si trascina il pezzo si vede che la pagina si aggiorna. Come posso risolvere questo problema?
    Innanzitutto il posizionamento per il trascinamento non è corretto. Se "prendi" il pezzo in un punto in mezzo, trascinandolo il cursore deve restare su quel punto. Quindi devi lavorare in modo "relativo" con le posizioni.

    Poi comunque vedo che certi pezzi trascinati passano "sotto" e altri "sopra" altri pezzi. Cosa brutta/dubbia. E per questo bisogna vedere la sequenza di painting.

    E per la questione del "flickering" (si chiama così quel difetto) bisogna sfruttare il "double-buffering". O lo fai tu (con una immagine off-screen che poi butti a video) .... o lo fai fare a Swing. Con JPanel ad esempio puoi sfruttare di serie il double-buffering. E che tra l'altro, fare ad esempio un tuo componente es. PannelloScacchi che estende JPanel sarebbe una soluzione saggia (dal punto di vista del design).

    P.S. fare il repaint di per sé è corretto. Come ottimizzazione potresti chiedere il repaint solo per l'area che è la "unione" del rettangolo vecchio+rettangolo nuovo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    andbin grazie mille per l'aiuto, ho risolto col double buffering. Se vai sul sito dovrebbe andare, comunque poi aggiusterò tutte quelle inesattezze che mi hai fatto notare. Mi ero fermato perchè non riuscivo a risolvere questo problema.

    La discussione si può chiudere ma non so come si fa. Ciao e grazie ancora.

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.