Eli siis miten estän kuvia välkkymästä kun repaintitaan, olen yrittän yrittänyt sitä tällä
public void update(Graphics g) { paint(g); }
mutta koska appletissa on liikkuva kuva tuo maalaa sen koko sille alueelle missä se käy. Onko muuta keinoa?
Kaksoispuskuroi. (Kaksoispuskuri = double buffer, ihan vain tiedonhakua ajatellen.)
kokeile soveltaa tätä:
//tarvittavat importit tähän... public Luokka extends Applet { public void update(Graphics g) { paint(g); } public void paint(Graphics g) { int width = this.getWidth(); int height = this.getHeight(); //Luodaan toinen piirtopinta puskuriksi Image bufferImage = createImage(width, height); Graphics buffer = bufferImage.getGraphics(); //Tässä suoritat piirrot bufferiin buffer.setColor(Color.green); buffer.drawString("Näin se toimii", 100, 50); //Piirretään puskurissa oleva kuva piirtopinnalle g.drawImage(bufferImage, 0, 0, width, height, this); } }
Koodin toimivuutta en ole testannut, mutta lisää tietoa pitäisi löytyä javan api-dokumentaatiosta.
Näin olen itse tottunut sen tekemään
import java.applet.*; import java.awt.*; public class MyBufferedClass extends Applet { Image puskuriKuva; Graphics puskuriPinta; public void init() { // alustetaan puskuriKuva puskuriKuva = (BufferedImage)createImage(this.getWidth(), this.getHeight()); // siirretään piirto tapahtumaan puskuriPinnalta puskuriKuvaan puskuriPinta = puskuriKuva.createGraphics(); } public void update(Graphics g) { paint(g); } public void paint(Graphics g) { puskuriPinta.drawString("Pörr",20,20); g.drawImage(puskuriPinta,0,0,this); } }
Tuossa sen toimintaa ei pääse oikein seuraamaan, koska eihän piirtopinta päivity koskaan, tuohon vielä threaditys ja vaikka pallo liikkumaan ni siinähän se.
Unohdinpa mainita, että tuossa esimerkissäni piirtopintaa ei siis pyyhitä koskaan automaattisesti, joten se pitää tehdä käyttäjän taholta jos ja kun semmoista usein halutaan.
tsurigan esimerkillä: cannot resolve symbol class BufferedImage
rivillä 33 eli
puskuriKuva = (BufferedImage)createImage(this.getWidth(), this.getHeight());
ja cannot resolve symbol method createGraphics()
rivillä 34 eli
puskuriPinta = puskuriKuva.createGraphics();
sekä cannot resolve symbol method drawImage(java.awt.Graphics, int, int, came)
Hupsista, anteeksi. Olisi pitänyt testata koodini tuon kirjoittamisen jälkeen, kopioin osan eräästä hieman erilaisesta koodista niin jäi tuo BufferedImage tuohon. Katsopas https://www.ohjelmointiputka.net/koodivinkit/
Aihe on jo aika vanha, joten et voi enää vastata siihen.