oransjeFugl Skrevet 17. juni 2010 Del 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 Lenke til kommentar
HV Skrevet 17. juni 2010 Del 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); } } 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å