abcd423417984 Skrevet 26. september 2005 Del Skrevet 26. september 2005 (endret) Jeg prøver å lage et enkelt spill i java, men jeg har litt problemer med å finne ut hvordan jeg kan bruke bildefiler fra disk til å tegne direkte på en JPanel ut i fra x og y kordinater. Bildene er i png format. Er det noen som har noe nyttig informasjon for å hjelpe meg med dette? Jeg er relativt ny i java gui programmering, men har noe erfaring fra andre språk. Oppdatering; Jeg har fått ting til å virke med følgende kode: ImageIcon img = new ImageIcon("bilde.png"); g.drawImage(img.getImage(), x, y, this); men jeg forstår ikke helt hva siste parameter er godt for i drawImage, og jeg har vanskelig for å tro at dette er den beste måten å gjøre det på. Endret 26. september 2005 av invictus Lenke til kommentar
yonderboy Skrevet 26. september 2005 Del Skrevet 26. september 2005 Tror ikke det er så dumt å bruke ImageIcon, selv om koden kan se litt rar ut ved første øyekast. ImageIcon har en stabil og sikker måte å laste et bilde på, den bruker en MediaTracker til å laste bildet - denne passer på at programmet ikke prøver å bruke bildet før det er ferdig lastet (særlig viktig hvis du bruker bilder fra nett). Siden det er et spill du holder på med, skal du sikkert bruke bildet flere ganger. Da er det nok lurt å lagre en referanse til bildet på klassenivå i stedet for å laste bildet hver gang du tegner det. Deklarer på klassenivå: Image bilde; Så laster du bildet i constructoren e.l. bilde = (new ImageIcon("bilde.png")).getImage(); Da kan du tegne bildet i painComponent metoden med: g.drawImage(bilde, x, y, this); Lenke til kommentar
abcd423417984 Skrevet 26. september 2005 Forfatter Del Skrevet 26. september 2005 Er egentlig det siste parameter i drawImage noe jeg bør sette meg inn i, eller kan jeg bare la det være for nå? Bruker forøvrig paint() og ikke paintComponent(). Lenke til kommentar
krigun Skrevet 26. september 2005 Del Skrevet 26. september 2005 Den siste parameteren er vel en ImageObserver, om jeg ikke husker feil. Du har ingen grunn til å begynne med å rote rundt med å skreddersy din egen imageobserver. (Med mindre du ønsker søvnløse netter da). JPanel arver en ImageObserver, derav referansen 'this'. Bare fortsett som du gjør. Lenke til kommentar
abcd423417984 Skrevet 28. september 2005 Forfatter Del Skrevet 28. september 2005 Et annet spørsmål jeg har er hvorvidt det er mulig å skrive innholdet på en JPanel (har altså her brukt det til å tegne på) til bildefil? Lenke til kommentar
krigun Skrevet 28. september 2005 Del Skrevet 28. september 2005 (endret) Dette er kode for doublebuffering (tatt fra en sun tutorial http://java.sun.com/docs/books/tutorial/2d...ebuffering.html ) Doublebuffering gir deg smoothere animasjoner ved å først tegne på et off-screen buffer, og så tegne bufferet på skjerm etterpå. Og da kan du bare skrive dette bufferet til fil etterpå. private firstTime = true; private Rectangle area; private BufferedImage bi; private Graphics2D big; public void paint( Graphics g ) { update(g); } public void update( Graphics g ) { Graphics2D g2 = (Graphics2D)g; if(firstTime) { Dimension dim = getSize(); int w = dim.width; int h = dim.height; area = new Rectangle(dim); bi = (BufferedImage)createImage(w, h); big = bi.createGraphics(); rect.setLocation(w/2-50, h/2-25); big.setStroke(new BasicStroke(8.0f)); firstTime = false; } // Clears the rectangle that was previously drawn. big.setColor(Color.white); big.clearRect(0, 0, area.width, area.height); // Draws and fills the newly positioned rectangle // to the buffer. big.fillRect( 10, 10, 100, 100 ); // Draws the buffered image to the screen. g2.drawImage(bi, 0, 0, this); } Deretter kan du bare skrive BufferedImage til fil ved å bruke følgende kode (har ikke testa, men tror dette skal funke). public void skrivBildeTilFil() { javax.imageio.ImageIO.write(bi, "png", new File("bilde.png")); } Endret 28. september 2005 av krigun Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå