oransjeFugl Skrevet 17. juni 2010 Skrevet 17. juni 2010 (endret) Har akkurat begynt å prøve å lære meg grafikkprogrammering i java. Og tenkte jeg skulle dele litt kunnskap med andre som har lyst til det samme. Folk må gjerne påpeke feil i koden, eller komme med bedre løsninger. I denne tråden ligger kode for et program, der et bilde beveger seg lineært nedover. Game.java: package grxTest; import java.awt.*; import javax.swing.*; public class Game extends JFrame { private boolean gameRunning; Image offscreenImage; Graphics offscreenGraphics; private Image player1; private int x = 0; private int y = 0; public static void main(String[] args) { new Game(); } public Game() { // selvforklarende? Ignore får appen til å ignorer kall til paint elns. setSize(800, 600); setBackground(Color.red); setIgnoreRepaint(true); setResizable(false); setVisible(true); loadImages(); // start the game gameRunning = true; gameLoop(); } private void loadImages() { // loader inn i minnet player1 = loadImage("/home/nab/Pictures/java/player1.png"); } private void gameLoop() { while(gameRunning) { drawStuff(); // vi pauser for å ikke stjele all cpu tid try { Thread.sleep(20); } catch (Exception e) {} } } private void drawStuff() { // double buffer for å forhindre flickering(bildet hakker) offscreenImage = createImage(800, 600); offscreenGraphics = offscreenImage.getGraphics(); offscreenGraphics.clearRect(0, 0, 800, 600); offscreenGraphics.drawImage(player1, x, y, null); // moves the player y++; x++; Graphics2D g = (Graphics2D) getGraphics(); g.drawImage(offscreenImage, 0, 0, null); g.dispose(); } public Image loadImage(String s) { return new ImageIcon(s).getImage(); } } Da er mine første skritt tatt. Dette var jo lett! Tegneteknikken som brukes her kalles for active rendering. D.v.s. at vi aktivt går inn og tenger på skjermen, i motsetning til passive rendering der vår implementasjon av paint(Graphics g) blir kallt på jevnlig. I drawStuff() tegnes først bildet på en bildebuffer, istedenfor rett på skjermen. Dette forhindrer at bildet "blinker". Prøv å tegn rett på skjermen så vil du se hva jeg mener med flickering. Ja nå har vi faktisk et lite rammeverk klart til å utvides enda mer. Neste post vil handle om animering av bildet. D.v.s. bilder i rekkefølge som danner en animasjon/bevegelse. Endret 17. juni 2010 av oransjeFugl
HV Skrevet 17. juni 2010 Skrevet 17. juni 2010 Hvis du bare flytter litt rundt på ting så blir det mye bedre=) import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import javax.swing.ImageIcon; import javax.swing.JFrame; public class Game extends JFrame { private boolean gameRunning; private BufferedImage bufferedImage; private int x = 0; private int y = 0; public static void main(String[] args) { new Game(); } public Game() { setSize(800, 600); setBackground(Color.red); setIgnoreRepaint(true); setResizable(false); setVisible(true); final Image player1 = new ImageIcon("/home/nab/Pictures/java/player1.png").getImage(); bufferedImage = new BufferedImage(player1.getWidth(null), player1.getHeight(null), BufferedImage.TYPE_INT_RGB); bufferedImage.getGraphics().drawImage(player1, 0, 0, null); gameRunning = true; gameLoop(); } private void gameLoop() { while (gameRunning) { drawStuff(); try { Thread.sleep(20); } catch (Exception e) { } } } private void drawStuff() { final Graphics2D g = (Graphics2D) getGraphics(); g.clearRect(0, 0, getWidth(), getHeight()); g.drawImage(bufferedImage, x++, y++, null); } }
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å