Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: java: välkkymisen estäminen

jonez [10.09.2004 17:45:06]

#

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?

Marja [10.09.2004 18:48:49]

#

Kaksoispuskuroi. (Kaksoispuskuri = double buffer, ihan vain tiedonhakua ajatellen.)

Sami [10.09.2004 20:01:17]

#

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.

tsuriga [10.09.2004 22:41:27]

#

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.

tsuriga [11.09.2004 11:40:15]

#

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.

jonez [11.09.2004 21:00:07]

#

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)

tsuriga [11.09.2004 21:11:30]

#

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/24347-java-kaksoispuskurointi, toimii testatusti :).

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta