Oon aika hukassa näitten Doublebuffering juttujen kanssa. Käsittääkseni swing:llä piirrettäessä se on automaattinen, mutta silti liikkuva kuvani välkkyy pahasti. Olen tehnyt JAppletin ja piirrän JPaneliin, jonka sitten lisään JAppletin layeredPaneen.
public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.drawImage(ukko,ukko_x,ukko_y, null); }
ukko on bufferedimage(turha?) johon haetaan kuva koneelta. Se liikkuu 50ms välein 7 pikseliä, jolloin se välkkyy aika pahasti.
Mitään ehdotuksia mitä pitäs tehä tolle? Kiitos.
Moikka jumitusta!
ota kuva siitä pohjasta jolle piirtelet ja piirrä se aina ennen ukkoa
g2.drawImage(pohja,0,0, null);
g2.drawImage(ukko,ukko_x,ukko_y, null);
Kiitos vastauksesta, mutta en oikein ymmärrä sitä...
pitäisikö siis ottaa taustasta kuva ja sitä piirtää aina ennen ukkoa? mutta kun se ukko ei ole ainoa mikä siellä liikkuu ja eikö se ole aika raskasta piirtää koko tausta aina 50ms välein uudestaan? Ja ainoa mikä välkkyy tuossa on siis se ukko(tai muut liikkuvat), ei siis paikallaan oleva tausta.
koitin jotain että piirtää ensin offscreen imageen, ja sitten sen kuvan läväyttää ruudulle, mutta se ei poistanut välkkymistä ja toi vielä lisäksi nykimistä, kun(kai) joutu piirtään kaiken 50ms välein uudestaa eikä ukkoa vaan.
Moikka taas jumitusta!
no jos ei funkkaa niin koekeile säädellä aikaa suuremmaksi (=piirtää harvemmin)
Hmm...jos aikaa pienentää ja säätää ukkoa liikkumaan kerralla vähemmän pikseleitä, ei välky niin pahasti, liikkuu siis yhtä nopeesti, mutta pienemmillä väleillä.
Mut joo, ei toikaan kunnol toimi, ja muutenkin pitäs jotenkin saada toi toimiin myöhempääkin käyttöö varten. Koitin myös kun jossain kehotettiin poistaan JPanel, repainttaan, ja sit taas uudestaan lisätä JPaneli, mutta ei mitään apua siitäkään. Onko ainoo vaihtoehto koittaa siirtyä swingistä awt:hen ja koittaa jos saisi jollain bufferstrategyllä tai vast toimiin, ei kai? mutta miten ihmeessä ton ny saisi toimiin tolla swingillä kunnolla.
Oisko näistä apua: Java Glossary - F words - flicker
lainaus:
4. Use Swing which has double buffering built-in. You must override paintComponent rather than paint to get the automatic double buffering. Oddly, sometimes turning double buffering off with JComponent. setDoubleBuffered( false ) might help.
--
6. In Windows, in Swing, you will see the entire screen repaint from time to time for no apparent reason, causing an annoying flicker. This is due to the fact that Swing uses DirectDraw for rendering which periodically redraws just to be safe. You can turn off DirectDraw and use standard Windows GDI rendering by starting
Java.exe -Dsun.java2d.noddraw=true MyClassThis will slightly slow down painting, however.
Kiitos vinkistä, mutta se ei kuitenkaan auttanut. No, pitää kattoo jos viä jotain keksis tai sit luovuttaa tolta osalta.
Moikka taas jumitusta!
Tsekkaa tämä ja tutki erityisesti Example6Applet
Nuo olivat vinkkejä awt piirtoon, enkä löytänyt sieltä apua omaan ongelmaani, mutta kiitos paljon että jaksoit antaa vinkkejä.
Rupesin vaan miettiin onko se ees mahdollista saada sitä ukkooni liikkuun välkehtimättä niillä parametreilla, siis 50ms välein 7 pikseliä, kun siinä on kuitenkin tommonen hypähtmäninen, teki sen miten tahansa, jos silmä näyttää sen välkehtiväks. Joo, en oikee tiedä mut teen ton ny sillain että pienennän aikaa ja pikselimäärää jolloin välkehtiminen helpottaa.
Puhutko nyt varmasti välkkymisestä etkä nykimisestä? Välkkyminen tarkoittaa siis, että jollain hetkellä ukkoa ei näy ruudulla lainkaan vaan takaa näkyy taustakuva tai tyhjä ruutu.
Aihe on jo aika vanha, joten et voi enää vastata siihen.