Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public void paint(Graphics g) { image = createImage(getWidth(),getHeight()); graphics = image.getGraphics(); g.fillRect(0, 0, getWidth(), getHeight()); paintComponent(graphics); g.drawImage(image, 0, 0, null); repaint(); } public void paintComponent(Graphics g) { player1.draw(g); player2.draw(g); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
public gamemain() { setTitle("Nyan's revenge!"); setResizable(false); setSize(600,400); setBackground(Color.black); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); player1 = new Player(10,150,20,90,10,getImage("images/player1.gif")); player2 = new Player(570,150,20,90,10,getImage("images/player2.gif")); } |
Quellcode |
|
1 2 3 4 |
private Image getImage(String img) { return Toolkit.getDefaultToolkit().getImage(img); } |
Ich habe mir mal die Mühe gamacht eine fehlerhafte und eine korrekte Implementierung zu schreiben. Ich hoffe du lernst aus diesen Beispielen. Genaueres zu deinem Code kann ich noch nicht sagen, ohne die komplette Klasse gesehen zu haben. Aber am besten du arbeitest das offizielle Tutorial durch, da sollten alle Fragen beantworted und wertvolle Tipps gegeben werden.Zitat
paint
public void paint(Graphics g)
Invoked by Swing to draw components.
Applications should not invoke paint directly,
but should instead use the repaint method to
schedule the component for redrawing.
This method actually delegates the work of painting to three
protected methods: paintComponent,
paintBorder,
and paintChildren. They're called in the order
listed to ensure that children appear on top of component itself.
Generally speaking, the component and its children should not
paint in the insets area allocated to the border. Subclasses can
just override this method, as always. A subclass that just
wants to specialize the UI (look and feel) delegate's
paint method should just override
paintComponent.
Java-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import javax.swing.*; import java.awt.*; // naiver fehlerhafter Ansatz // nicht threadsicher public class MainNaiv extends JFrame { int i; public static void main(String args[]) { MainNaiv main = new MainNaiv(); main.pack(); main.setVisible(true); } // Man sieht wie die Linie nicht an der Position 0,0 im ContentPane beginnt, // sondern an der Position 0,0 des Fenserrahmens public void paint(Graphics g) { i ++; g.drawLine(0, 0, i, i); System.out.println(i); } } |
Java-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import javax.swing.*; import java.awt.*; // robuster Ansatz public class Main extends JFrame { public Main() { setDeafaultCloseOperation(EXIT_ON_CLOSE); // wenn das Fenster gaschlossen wird soll das Programm beendet werden setContentPane(new GPanel()); pack(); setVisible(true); } public static void main(String args[]) { // Swingkomponenten sollten nur im Event-Dispatch-Thread (EDT) erzeugt werden SwingUtilities.invokeLater(new Runnable() { public void run() { Main main = new Main(); main.pack(); main.setVisible(true); } } ); } private class GPanel extends JPanel { private int i; public void paintComponent(Graphics g) { i ++; g.drawLine(0, 0, i, i); System.out.println(i); } } } |
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »foreach« (30.05.2012, 10:00)
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import javax.swing.JFrame; public class gamemain extends JFrame { private static final long serialVersionUID = 1L; private Player player1; private Player player2; private Image image; private Graphics graphics; /** * @param args */ public static void main(String[] args) { // Entry point of the game! new gamemain(); } public gamemain() { setTitle("Nyan's revenge!"); setResizable(false); setSize(600,400); setBackground(Color.black); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); player1 = new Player(10,150,20,90,10,getImage("images/player1.gif")); player2 = new Player(570,150,20,90,10,getImage("images/player2.gif")); } public void paint(Graphics g) { image = createImage(getWidth(),getHeight()); graphics = image.getGraphics(); g.fillRect(0, 0, getWidth(), getHeight()); paintComponent(graphics); g.drawImage(image, 0, 0, null); repaint(); } public void paintComponent(Graphics g) { player1.draw(g); player2.draw(g); } private Image getImage(String img) { return Toolkit.getDefaultToolkit().getImage(img); } public Player getPlayer1() { return player1; } public void setPlayer1(Player player1) { this.player1 = player1; } public Player getPlayer2() { return player2; } public void setPlayer2(Player player2) { this.player2 = player2; } public Image getImage() { return image; } public void setImage(Image image) { this.image = image; } public Graphics getGraphics() { return graphics; } public void setGraphics(Graphics graphics) { this.graphics = graphics; } } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import java.awt.Graphics; import java.awt.Image; public abstract class GameObject { protected Image img; protected int xPos; protected int yPos; protected int width; protected int height; protected int health; abstract void draw(Graphics g); abstract void update(); public Image getImg() { return img; } public void setImg(Image img) { this.img = img; } public int getxPos() { return xPos; } public void setxPos(int xPos) { this.xPos = xPos; } public int getyPos() { return yPos; } public void setyPos(int yPos) { this.yPos = yPos; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getHealth() { return health; } public void setHealth(int health) { this.health = health; } } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import java.awt.Graphics; import java.awt.Image; public class Player extends GameObject { /** * Creates the player * @param x * @param y * @param w * @param h * @param img */ public Player(int x, int y, int w, int h, int health, Image img) { this.xPos = x; this.yPos = y; this.width = w; this.height = h; this.health = health; this.img = img; } @Override public void draw(Graphics g) { g.drawImage(img, xPos, yPos, width, height, null); } @Override void update() { } } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
import java.awt.Graphics; import java.awt.Image; public class Bullet extends GameObject { private int deltax; /** * Creates the Bullet(s) * @param x * @param y * @param w * @param h * @param img * @param health */ public Bullet(int x, int y, int w, int h, Image img) { this.xPos = x; this.yPos = y; this.width = w; this.height = h; this.img = img; } @Override public void draw(Graphics g) { g.drawImage(img, xPos, yPos, width, height, null); } @Override void update() { } public int getDeltax() { return deltax; } public void setDeltax(int deltax) { this.deltax = deltax; } } |
Java-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; // Die Klasse erbt nicht mehr von JFrame sondern von JPanel, damit steigt // der Grad an Wiederverwendbarkeit. Du könntest GameMain jetzt z.B. auch in // ein Applet einfügen. public class GameMain extends JPanel { private static final long serialVersionUID = 1L; private Player player1; private Player player2; private Image image; private Graphics graphics; /** * @param args */ public static void main(String[] args) { // Swingkomponenten sollten nur im Event-Dispatch-Thread (EDT) erzeugt werden SwingUtilities.invokeLater(new Runnable() { public void run() { GameMain gameMain = new GameMain(); JFrame frame = new JFrame(); // Du solltest, wie ich im vorherigen Beispiel gezeigt habe, nie direkt auf ein // JFrame zeichnen, sondern immer mit dem ContentPane arbeiten! frame.setContentPane(gameMain); frame.setTitle("Nyan's revenge!"); frame.setResizable(false); frame.pack(); // du hast pack vergessen frame.setSize(600,400); frame.setBackground(Color.black); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } ); } public GameMain() { player1 = new Player(10,150,20,90,10,getImage("images/player1.gif")); player2 = new Player(570,150,20,90,10,getImage("images/player2.gif")); } public void paintComponent(Graphics g) { player1.draw(g); player2.draw(g); } private Image getImage(String img) { return Toolkit.getDefaultToolkit().getImage(img); } public Player getPlayer1() { return player1; } public void setPlayer1(Player player1) { this.player1 = player1; } public Player getPlayer2() { return player2; } public void setPlayer2(Player player2) { this.player2 = player2; } public Image getImage() { return image; } public void setImage(Image image) { this.image = image; } public Graphics getGraphics() { return graphics; } public void setGraphics(Graphics graphics) { this.graphics = graphics; } } |
Werbeanzeige